Intereting Posts
Как предотвратить дублирование пули для wp_insert_post? Архивная страница с переписью нескольких таксономий Пользовательский режим не загружается Проблема с switch_to_blog () Уменьшение эскизов без создания новых изображений Регистрация сайта и координация MailChimp? Создание страниц с конкретными категориями блога Тот же заголовок / нижний колонтитул в Admin, на всех сетевых сайтах в многопользовательском режиме опция галереи недоступна в поле для загрузки мультимедиа в странице опций с параметрами costum Добавить роль в сети в многопользовательском режиме Какой самый простой способ закрыть комментарии к медиа / вложениям? Плагин для ссылок на стиль в стиле википедии в WP? Код для отображения отдельного Single.php является переопределяющим нормальным single.php, тоже Применить код для всего остального первого блока Современный календарь Tribe Календарь wp-запрос с мета-запросом не работает вообще

Применение канонических URL-адресов с несколькими пользовательскими типами сообщений

Я работаю над проектом с несколькими пользовательскими типами сообщений, где один из типов сообщений естественно (но не на самом деле в смысле WordPress) «родительский» из других. Например, скажем, у меня есть пользовательский тип сообщения, называемый «книга», а другой – «символ», и я хочу, чтобы у меня была следующая структура URL-адресов:

books/[book-name]/characters/[character-name] 

Таким образом, канонический URL для сообщения о персонаже Thing One в книге «Кошка в шляпе» будет:

  books/cat-in-the-hat/characters/thing-one 

Персонаж связан с книгой с мета-строкой.

Я создал пользовательские перезаписи, чтобы заставить его работать …

 add_rewrite_rule ( '^books/([^\/]+)/characters/([^\/]+)/?$', 'index.php?book=$matches[1]&character=$matches[2]&post_type=character' ); 

… но мне также нужно убедиться, что «сообщение персонажа» в URL-адресе относится к «книге» …

 books/cat-in-the-hat/characters/thing-one //good books/anna-karenina/characters/count-vronsky //good books/anna-karenina/characters/thing-one //bad 

Это не может произойти автоматически: я должен подключиться к фильтру или к действию, чтобы проверить, соответствует ли символ книге, а если нет, либо перенаправлять на правильный, канонический URL-адрес, либо принудительно 404.

Где лучшее место для выполнения этой проверки? Мой выбор (до сих пор):

  • Фильтр request – т.е. проверка перед основным запросом создается.
  • Различные фильтры WP_Query, то есть делают WP_Query, проверяют меня, добавляя ограничение метаданных.

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

Solutions Collecting From Web of "Применение канонических URL-адресов с несколькими пользовательскими типами сообщений"

Я занимался подчиненными типами писем с аналогичной веной, но не был столь строгим в отношении канонического url; однако, я столкнулся с аналогичной ситуацией с подключением пользовательских ссылок типа продукта WooCommerce .

Я использовал крючок template_redirect чтобы нажать 404, если он не соответствует маршруту и post_type_link чтобы обеспечить метатег для канонической ссылки, а все the_permalink() и get_permalink() соответствуют намеченной ссылке.

Я хотел бы рекомендовать это:

 add_action( 'template_redirect', 'wp20140320_template_redirect' ); public function wp20140320_template_redirect(){ global $wp_query, $post; // the character post type has the book id set as meta? // or could set as post_parent if you don't have characters heirarchical $book_id = get_post_meta( $post->ID, '_book_id', true ); // compare_parent_slug_to_id to check required $book_id against set parent book slug if( $post->post_type == 'character' && ! compare_parent_slug_to_id( $book_id ) ){ // set is_404 since post type is character and parent slug does not match set $wp_query->is_404 = true; status_header(404); include get_404_template(); exit; // maybe a better way to gracefully exit? } } 

Изменено из источника