Intereting Posts
Как разделить содержимое (пользовательский тип сообщения) на нескольких страницах? Лучший способ использования категорий и пользовательских полей? Динамическое значение для get_option связано с таксономией term_id? Иерархические пользовательские поля На клики добавьте новый пост, чтобы перенаправить пользователя на пользовательскую страницу сначала Как вручную инициировать перенаправление на другую страницу без изменения адреса URL? Получить исходное изображение с эскиза URL Настройка основного меню для включения пользовательского описания таксономии Как упорядочить категории в Woocommerce, которые распространяются по нескольким страницам? Тестирование плагина с несколькими версиями WordPress Создание опции для написания сообщения без атрибуции автора для группового блога на WordPress Все файлы, извлекаемые из wp-контента, возвращают ошибку 404 Разделите меню на отдельные меню и покажите их рядом друг с другом Расширение ширины содержимого с двадцатью четырьмя темами Преобразование пользовательской таксономии в обычные сообщения

Несколько шаблонов для пользовательских типов сообщений

Это моя настройка: у меня есть один тип сообщения, называемый «продукты» и страница (страница X), где я использую wp_query для перечисления всех продуктов, the_permalink (); возвращает ссылку на single-products.php.

Целью является использование wp_query на другой странице (страница Y) и список всех продуктов, но постоянная ссылка теперь должна быть связана с другим шаблоном, например single-products2.php.

В принципе мне нужны два шаблона для одного и того же типа сообщений.

Самый простой способ. Создайте шаблон страницы , называя его, например, «Альтернативная страница продукта». Поэтому создайте php-файл и назовите его, например, page-products-2.php .

В первых двух строках этого файла поставьте:

 <?php /* Template Name: Alternative Product Page */ 

Если вы хотите, чтобы этот дизайн страницы был точно таким же на первой странице продукта (который, как я предполагаю, называется page-products.php ), в файле просто добавьте

 require 'page-products.php'; 

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

Теперь в вашем бэкенде присвойте второй странице шаблон, который вы только что создали. Таким образом, вы сможете распознать, что пользователь находится на этой странице, не полагаясь на свой идентификатор или заголовок или что-то еще. Кроме того, вы можете иметь такое же поведение на более чем одной странице, если хотите.

После того, как вы распознаете страницу, вы можете добавить фильтр в одиночную ссылку, если на этой странице:

 add_action('template_redirect', 'change_product_plink'); function change_product_plink() { if ( is_page_template('page-products-2.php') ) { // remember to use real file name add_filter( 'post_link', 'product_query_string', 10, 2 ); } } function product_query_string( $url, $post ) { if ( $post->post_type === 'product' ) { $url = add_query_arg( array('style'=>'alt'), $url ); } return $url; } 

Используя этот код, когда в альтернативном шаблоне страницы будет добавлено что-то вроде '?style=all' для всех постоянных ссылок продукта.

Наконец, добавьте фильтр в template_include чтобы использовать альтернативный шаблон, когда он отображается в виде единого продукта, и этот запрос var установлен.

 add_action('template_include', 'maybe_alt_product_single'); function maybe_alt_product_single($template) { if( is_singular('product') ) { $alt = filter_input(INPUT_GET, 'style', FILTER_SANITIZE_STRING); if ( $alt === 'alt' ) $template = 'single-products2.php'; } return $template; }