Как использовать пользовательский тип записи в качестве главной страницы?
Я хотел бы сделать главную страницу сайта отдельной публикацией из пользовательского типа публикации. Я смог изменить запрос на мою первую страницу на пользовательский тип публикации архив со следующим кодом (первоначально , опубликованным здесь):
function custom_front_page($wp_query){
if($wp_query->get('page_id')==get_option('page_on_front')){
$wp_query->set('post_type','album');
$wp_query->set('page_id',''); // empty
// fix conditional functions
$wp_query->is_page = false;
$wp_query->is_archive = true;
$wp_query->is_post_type_archive = true;
}
}
add_action('pre_get_posts','custom_front_page');
Замена
$wp_query->is_archive = true;
$wp_query->is_post_type_archive = true;
С
$wp_query->is_single = true;
Вызывает шаблон single-album.php
, как мне бы хотелось, но он все равно возвращает ВСЕ записи в категории "Альбомы", а не только одну.
Добавление
$wp_query->set('posts_per_page',1);
Не имеет никакого эффекта.
Что я должен делать вместо этого?
Бонусный вопрос: есть ли где-нибудь хорошая ссылка о том, как манипулировать query
таким образом?
4 answers
Самым простым способом отображения одного сообщения на главной странице было бы:
global $wp_query;
$wp_query = new WP_Query( array( 'p' => 'POST ID HERE' ) );
include( 'single-POSTTYPE.php' );
Мне пришлось сделать то же самое для клиента, и я нашел два ресурса, которые помогли мне:
Как вы используете CPT в качестве домашней страницы по умолчанию?
Это решение, которое сработало для меня:
function add_<MYTPE>_to_dropdown( $pages, $r )
{
if('page_on_front' == $r['name'])
{
$args = array(
'post_type' => '<MYTYPE>'
);
$items = get_posts($args);
$pages = array_merge($pages, $items);
}
return $pages;
}
add_filter( 'get_pages', 'add_<MYTPE>_to_dropdown' );
function enable_front_page_<MYTPE>( $query )
{
if('' == $query->query_vars['post_type'] && 0 != $query->query_vars['page_id'])
$query->query_vars['post_type'] = array( 'page', '<MYTPE>' );
}
add_action( 'pre_get_posts', 'enable_front_page_<MYTPE>' );
Просто замените <MYTYPE>
вашим пользовательским именем машины типа post
Https://wordpress.org/plugins/mpress-custom-front-page /, похоже, реализует правильную логику чистым способом.
Github https://github.com/wpscholar/mpress-custom-front-page/