Intereting Posts
Извлечь все данные короткого кода из столбцов в переменные цикла? Как переместить файлы ядра js в нижний колонтитул action hook wp_head более высокий приоритет, так как все остальные плагины / крючки Захватите ID из сообщения из плагина и используйте его для создания объекта Как отмечать сообщения как посещаемые Когда 'is_post_type_archive ()' возвращает true? Отображать несколько пользовательских типов сообщений и сортировать их по хронологии одним из своих полей Как решить проблему работы WordPress Cron? как я могу изменить текст в разделе комментариев? get_comment_meta () для фильтра в плагине Содержимое Trim Post на главной странице Отображение сообщения в зависимости от значения настраиваемого поля Пользовательский указатель WordPress показывает пустую страницу boostrap на wp-admin backend через установку плагина Запуск цикла пользовательских типов сообщений с помощью AJAX

Объединение нескольких таксономий в один URL-адрес

Я создаю сложный сайт с каталогом продуктов с двумя пользовательскими таксономиями. Это бренды и типы.

Бренды – Canon – Toshiba – HP

Типы – Принтеры – Сканеры – Многофункциональные устройства

Мне нужна страница, на которой найдены все продукты, которые представляют собой комбинацию одной марки и одного типа. Бренд является более важным из двух, поэтому его следует отфильтровать как Brand -> Type (хотя было бы идеально, если бы это было взаимозаменяемо).

Я могу сделать это, изменив запрос на основе параметра, который я добавляю в конец URL-адреса. Например, этот URL-адрес может быть одним из следующих:

  • http://www.example.com/brand/canon/?type=printers
  • http://www.example.com/brand/canon/?type=scanners
  • http://www.example.com/brand/canon/?type=multifunction
  • http://www.example.com/brand/toshiba/?type=printers
  • http://www.example.com/brand/toshiba/?type=scanners
  • http://www.example.com/brand/toshiba/?type=multifunction
  • http://www.example.com/brand/hp/?type=printers
  • http://www.example.com/brand/hp/?type=scanners
  • http://www.example.com/brand/hp/?type=multifunction

Но мне сказали, что это не очень удобно для SEO-целей. В идеале, я бы хотел, чтобы URL-адрес был структурирован как http://www.example.com/brand/type/ . Это приведет к URL-адресам, таким как:

  • http://www.example.com/canon/printers
  • http://www.example.com/canon/scanners
  • http://www.example.com/canon/multifunction
  • http://www.example.com/toshiba/printers
  • http://www.example.com/toshiba/scanners
  • http://www.example.com/toshiba/multifunction
  • http://www.example.com/hp/printers
  • http://www.example.com/hp/scanners
  • http://www.example.com/hp/multifunction

Да, я знаю, что я могу настроить субкатегории для каждого типа продукта под каждым брендом, но мне также нужно иметь возможность просматривать все продукты под каждым типом продукта, не имеющим отношения к бренду.

Кстати, если URL-адрес должен быть немного сложнее (т. Е. / Brand / hp / type / multifunction /), это лучше, чем ничего.

Есть ли какие-то хитрости с постоянными отношениями, которые я мог бы сделать, чтобы заставить ссылки структурироваться так, как они мне нужны?

ОБНОВЛЕНИЕ 10/23/15: я просто потратил час, пытаясь диагностировать, почему это перестало работать на сайте, который я построил. Оказывается, я переопределял запрос по умолчанию с помощью настраиваемого в одном из шаблонов архива таксономии. Для борьбы с этим вы можете сделать следующее:

<?php $tax_query = $wp_query->query_vars; ?> <?php if ($tax_query["types"] && $tax_query["brands"]) { // default query stuff here } else { // custom query stuff here } ?> 

Solutions Collecting From Web of "Объединение нескольких таксономий в один URL-адрес"

Это правило перезаписи должно работать (при условии, что «бренд» и «тип» являются зарегистрированными названиями таксономии):

 function custom_rewrite_rules() { add_rewrite_rule('^brand/(.*)/type/(.*)?', 'index.php?brand=$matches[1]&type=$matches[2]', 'top'); } add_action('init', 'custom_rewrite_rules'); 

Не забудьте очистить правила rewirte после сохранения этого кода на вашем сайте.

Тогда вам нужно будет зацепить несколько мест, чтобы исправить ситуацию. Например, вам может понадобиться зацепить wp_title чтобы создать правильный заголовок для документа, например «Принтеры HP», или просто «HP», так как это не будет автоматически обрабатываться WordPress. Я не могу дать исчерпывающий список вещей, которые вам нужно исправить .

Вырываясь, чтобы ответить на этот вопрос, я нашел здесь следующую функцию перезаписи:

 function eg_add_rewrite_rules() { global $wp_rewrite; $new_rules = array( 'user/(profession|city)/(.+?)/(profession|city)/(.+?)/?$' => 'index.php?post_type=eg_event&' . $wp_rewrite->preg_index(1) . '=' . $wp_rewrite->preg_index(2) . '&' . $wp_rewrite->preg_index(3) . '=' . $wp_rewrite->preg_index(4), 'user/(profession|city)/(.+)/?$' => 'index.php?post_type=eg_event&' . $wp_rewrite->preg_index(1) . '=' . $wp_rewrite->preg_index(2) ); $wp_rewrite->rules = $new_rules + $wp_rewrite->rules; } add_action( 'generate_rewrite_rules', 'eg_add_rewrite_rules' ); 

эта функция принимает URL-адрес, например: example.com/user/profession/designer,knight/city/athens,gotham/, и преобразует его в переменные:

 $proffession = "designer,knight"; $city = "athens,gotham"; 

которые могут использоваться в taxonomy.php

Дополнительная информация: https://stackoverflow.com/a/34624138/5594521

Рабочая демонстрация: http://playground.georgemanousarides.com/

Надеюсь, поможет!