Intereting Posts
permalink и add_rewrite_rule – ошибка 404 Загрузка файла WordPress в WordPress в пользовательском сообщении Штрих-код полосы от конкретных типов сообщений (форматов) Возможны ли страницы архива категории или тега? Почему is_page не работает, когда я помещаю его в файл functions.php? is_home и is_front_page условная проблема Публикация сообщения и создание дополнительных сообщений с одним контентом В woocommerce некоторые продукты имеют пустые опции, но как проверить это Как получить параметры на этой странице параметров? Медленный администратор – ждет и долго блокируется Пользовательский тип сообщения не работает с возможностями Подсчитайте, сколько категорий принадлежит должности Пользовательский тип сообщения с пользовательской таксономией в бутстрапе 4 Аккордеон Проверьте, имеет ли пост определенный tag_ID в пользовательском типе сообщения Таксономии: отображение иерархического родительского списка

Как использовать персонализированный архив типа публикации в качестве главной страницы?

Я бы хотел использовать специальный архив типа post как главную страницу сайта, так что

http://the_site.com/ 

это архив настраиваемого типа сообщений, отображаемый в соответствии с моим archive-{post-type}.php .

В идеале я хотел бы изменить запрос, используя is_front_page() в моем файле functions.php . Я попробовал следующее: со страницей «Главная» в качестве моей первой страницы:

  add_filter('pre_get_posts', 'my_get_posts'); function my_get_posts($query){ global $wp_the_query; if(is_front_page()&&$wp_the_query===$query){ $query->set('post_type','album'); $query->set('posts_per_page',-1); } return $query; } 

но на первой странице возвращается содержимое «Главная» и, кажется, игнорирует пользовательский запрос.

Что я делаю не так? Есть ли лучший способ, в общем, обойти это?

После того, как вы установили статическую страницу в качестве домашней страницы, вы можете добавить ее в свои functions.php и вам хорошо идти. Это также правильно archive-POSTTYPE.php шаблон archive-POSTTYPE.php .

 add_action("pre_get_posts", "custom_front_page"); function custom_front_page($wp_query){ //Ensure this filter isn't applied to the admin area if(is_admin()) { return; } if($wp_query->get('page_id') == get_option('page_on_front')): $wp_query->set('post_type', 'CUSTOM POST TYPE NAME HERE'); $wp_query->set('page_id', ''); //Empty //Set properties that describe the page to reflect that //we aren't really displaying a static page $wp_query->is_page = 0; $wp_query->is_singular = 0; $wp_query->is_post_type_archive = 1; $wp_query->is_archive = 1; endif; } 

Переименуйте свой архив CPT в home.php

Затем используйте pre_get_posts для изменения запроса на домашнюю страницу, так что только отображение CPT

 function wpsites_home_page_cpt_filter($query) { if ( !is_admin() && $query->is_main_query() && is_home() ) { $query->set('post_type', array( 'your-cpt' ) ); } } add_action('pre_get_posts','wpsites_home_page_cpt_filter'); 

Замените ваш-cpt именем своего настраиваемого типа сообщения.

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

 $wp_query->is_post_type_archive = 1; $wp_query->is_archive = 1; 

Это работает лучше для меня, переопределяя как сообщения в блоге, так и статическую страницу в разделе «Настройки»> «Чтение»> «Основные страницы»:

 <?php /** * Set custom post type archive as front page. * * @since 1.0.0 */ function ql_set_as_front_page( $query ) { if ( is_admin() || ! $query->is_main_query() ) { return; } if ( ql_is_front_page( $query ) ) { $query->set( 'page_id', '' ); $query->is_page = false; $query->is_singular = false; $query->set( 'post_type', 'MYCPT' ); $query->is_archive = true; $query->is_post_type_archive = true; } } add_action( 'pre_get_posts', 'ql_set_as_front_page' ); /** * Taken from WP_Query::is_front_page and adapted to compare page_on_front with current page ID. * * @since 1.0.0 * * @param object $query The main WP Query. */ function ql_is_front_page( $query ) { if ( 'posts' == get_option( 'show_on_front') && $query->is_home() ) return true; elseif ( 'page' == get_option( 'show_on_front') && get_option( 'page_on_front' ) && $query->get('page_id') == get_option( 'page_on_front' ) ) return true; else return false; } 

Я использую его в сочетании с переопределением шаблона, используя фильтры front_page_template и home_template для возврата пользовательского шаблона.

Для меня это разбивает разбиение на страницы: либо вы выбираете индекс, либо статическую страницу в качестве домашней страницы, отображаются страницы разбиения на страницы, но при нажатии на стр. 2 я получаю:

  • в случае индексной страницы (по умолчанию): страница 404
  • в случае статической страницы: те же результаты, что и на странице 1: аргумент «paged» затем интерпретируется, чтобы отображать разбиение на страницы типа страницы, а не на разбиение на страницы типа списка.

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

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