Intereting Posts
Как заказывать сообщения (продукты woocommerce) в алфавитном порядке, но игнорировать определенные слова, например «The» и «An», Реализация инструкции OR для wordpress wp_query Включить администраторов в раскрывающийся список автора на экране редактирования сообщений Устранить многопользовательские сети MultiSite Что случилось с convertEntities? Динамически получить пользовательскую таксономию и добавить в tax_query .htpasswd запрашивает аутентификацию на домашней странице. Изменение роли пользователя при утверждении по почте Получение подкатегории Ссылки на текущую страницу теперь перенаправляются на черновик страницы? Создать выбранный метаболизм, который пользователь может развернуть? Для сайта с низким трафиком на WordPress нужен плагин для кеширования и CDN Вставка рекламы в контент Переименование темы «Двадцать четырнадцать слов» Почему is_page_template () не добавляет класс body?

Несколько пользовательских типов сообщений с использованием той же таксономии = расстройства URL

У меня есть два пользовательских типа сообщений:

  • Мероприятия
  • Компании

У меня новая таксономия, что обе эти акции CTP:

  • Места

Если я перейду на «domain.com/events/», я вижу архив всех событий, и если я перейду в «domain.com/businesses/», я увижу архив всех предприятий. Все идет нормально.

Если я перейду на «domain.com/locations/», я вижу архив всех событий и предприятий, что хорошо.

Однако, как я могу просматривать только места событий? «domain.com/locations/events» или «domain.com/events/locations» не работает.

Должен ли я изменить параметры перезаписи для таксономии местоположений или CPT? Кажется, я застрял!

Solutions Collecting From Web of "Несколько пользовательских типов сообщений с использованием той же таксономии = расстройства URL"

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

 // use the init action to modify rewrite rules add_action( 'init', function() { global $wp_rewrite; // add rewrite tag for the post type // - %posttype% is a new tag that will be replaced with the regex in the actual query // - the regex will extract the post_type name from the URL and use it in the query add_rewrite_tag( '%posttype%', '([^/]+)', 'post_type=' ); // create the new permastruct by combining the post type & taxonomy permastructs // - custom taxonomies and post types are added to the extra_permastructs array in WP_Rewrite // - change 'category' to desired taxonomy // - output will be '%posttype%/category/%category%' $types_and_cats_permastruct = '%posttype%' . $wp_rewrite->get_extra_permastruct( 'category' ); // add the permastruct for post type & taxonomy add_permastruct( 'post_type_and_category', $types_and_cats_permastruct, array( 'with_front' => true, // - with_front (bool) - Should the structure be prepended with WP_Rewrite::$front? Default is true. 'ep_mask' => EP_ALL_ARCHIVES, // - ep_mask (int) - Endpoint mask defining what endpoints are added to the structure. Default is EP_NONE. 'paged' => true, // - paged (bool) - Should archive pagination rules be added for the structure? Default is true. 'feed' => true, // - feed (bool) - Should feed rewrite rules be added for the structure? Default is true. 'forcomments' => false, // - forcomments (bool) - Should the feed rules be a query for a comments feed? Default is false. 'walk_dirs' => false, // - walk_dirs (bool) - Should the 'directories' making up the structure be walked over and rewrite // rules built for each in turn? Default is true. 'endpoints' => true // - endpoints (bool) - Should endpoints be applied to the generated rewrite rules? Default is true. ) ); } ); 

Поэтому, чтобы объяснить, что я делаю выше:

  1. Добавляем тег rewrite с помощью add_rewrite_tag() чтобы при добавлении пользовательского типа типа сообщения в URL-адрес (например, / events / location / uk /) он будет распознаваться с помощью обычного выражения, а в результате запроса WP post_type=events будет содержать post_type=events
  2. Создавая новый permastruct для создания правил для использования тега, который мы только что добавили, и существующей таксономии, в вашем случае это будет местоположение so /event/location/uk покажет uk события и /business/location/uk покажет uk предприятия
  3. Добавление нового permastruct с помощью add_permastruct() чтобы WP генерировал новые правила перезаписи при обновлении постоянных ссылок. В третьем параметре очень важно, чтобы walk_dirs установили значение false, поскольку вы получите некоторые нежелательные агрессивные правила перезаписи с архивами для /%posttype%/category/ and /%posttype%/

Gotchas

  • Создание ссылок – если вы хотите использовать the_terms() для вывода ссылок на местоположение для бизнеса или события, которое отображает только исходный тип сообщения, вам придется отфильтровать URL-адреса или написать пользовательскую функцию для вывода URL-адресов в соответствии с вашими пермаструктурами
  • Если вы никогда не хотите, чтобы в архиве перечислялись как события, так и предприятия, тогда две отдельные таксономии являются лучшей идеей, так как вам будет легче узнать, есть ли у этого термина какие-либо должности в нем, например. при создании ссылок и принятии решения о том, следует ли выводить ссылку на пустой архив или нет. В этом случае ответ @ Ричард-хауарт верен

Вы можете указать slug для использования в args при вызове функции register_taxonomy с помощью «rewrite».

Итак, у вас будет что-то вроде следующего:

 $args = array( 'labels' => $labels, 'rewrite' => array( 'slug'=>'events/locations' ) ); register_taxonomy( 'event_location_tax_name', 'event_location_cpt_name', $args ); 

И затем повторите для бизнеса:

 $args = array( 'labels' => $labels, 'rewrite' => array( 'slug'=>'businesses/locations' ) ); register_taxonomy( 'business_location_tax_name', 'business_location_cpt_name', $args ); 

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

Спасибо, Рик