Nano Hash - криптовалюты, майнинг, программирование

Перезапись URL-адреса Wordpress CPT

Я пытаюсь восстановить URL-адрес своего сайта WordPress, но безуспешно.

У меня есть 3 пользовательских типа сообщений, строк, коллекций и продуктов. Идея в том, что они связаны иерархией (один ко многим): линейки, коллекции, товары.

Итак, если у меня есть строка с именем L, коллекция с именем C и продукт P, я хотел бы получить доступ к ним следующим образом:

Строка A должна выглядеть как site.com/l.

Столбец A должен выглядеть как site.com/l/c.

Продукт А должен выглядеть как site.com/l/c/p.

Я написал этот код, но он не работает должным образом.

В этом порядке правил перезаписи все 3 URL-адреса возвращают строку A.

Но если я инвертирую порядок и закодирую правила перезаписи, поставив продукты первыми, коллекции вторыми и строки третьим правилом, поведение изменится.

При инверсии URL-адрес site.com/l возвращает строку A, а URL-адреса site.com/l/c и site.com/l/c/p возвращают столбец A.

Я понятия не имею, почему я не могу получить доступ к странице продукта.

Кстати, я использую плагин Types для создания CPT и плагин ACF для создания метаполя с взаимосвязью между CPT (именно поэтому у меня есть функция «get_field»)

// BACK_END
add_filter('post_type_link', 'site_type_permalink', 10, 4);

function site_type_permalink($post_link, $post, $leavename, $sample) {

$permalink = $post_link;

if ($post->post_type == 'lines') {
    $permalink = str_replace('lines/', '', $post_link);
}

if ($post->post_type == 'collections') {
    global $post;

    $lines = get_field('line_obj');
    $title = $lines[0]->post_name;

    $permalink = str_replace('collections/', $title . '/', $post_link);
}

if ($post->post_type == 'products') {
    global $post;

    $col = get_field('collection_obj');
    $colSlug = $col[0]->post_name;
    $lin = get_field('line_obj', $col->ID);
    $linSlug = $lin[0]->post_name;

    $permalink = str_replace('products/', $linSlug . '/' . $colSlug . '/', $post_link);
 }

 return $permalink;
}


// FRONT_END
function site_rewrite_rules() {

// lines
add_rewrite_rule(
  '((?!blog|wp-json)[^/]*)/?',
  'index.php?lines=$matches[1]',
  'top'
);


// collections
add_rewrite_rule(
  '((?!blog|wp-json)[^/]*)/([^/]*)/?',
  'index.php?lines=$matches[1]&collections=$matches[2]',
  'top'
);


// products
add_rewrite_rule(
  '((?!blog|wp-json)[^/]*)/([^/]*)/([^/]*)/?',
  'index.php?lines=$matches[1]&collections=$matches[2]&products=$matches[3]',
  'top'
);

}
add_action('init', 'site_rewrite_rules', 10, 0);

У кого-то есть идея, что я делаю неправильно? Спасибо


  • Это не работает, не говорит нам, в чем проблема. А что не работает? Ошибки? Белый экран? Что-то другое? 11.03.2015
  • Вы абсолютно правы. Я отредактировал вопрос, чтобы быть более ясным. 11.03.2015

Ответы:


1

Линии, коллекции, продукты... все это просто продукты. Создайте один тип сообщений с организованной таксономией и создайте страницы для строк/коллекций, которые запрашивают соответствующие продукты.

11.03.2015
  • Конечно это вариант. Может быть, самый логичный. Но создание линий и коллекций как таксономий; как я могу гарантировать сбор строк иерархии? 12.03.2015
  • Вы можете создать одну таксономию с иерархией - родительские и дочерние термины. Тогда у вас может быть site.com/line/collection/product codex.wordpress.org/Taxonomies. 12.03.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..