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

12 окт. 2011 г., 12:29:30
Просмотры: 18.1K
Голосов: 6

Я хочу установить главную страницу сайта как отдельную запись из пользовательского типа записи. Мне удалось изменить запрос для главной страницы на архив пользовательского типа записи с помощью следующего кода (оригинально опубликовано здесь):

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',''); // очищаем
        // исправляем условные функции
        $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, как мне и нужно, но при этом возвращаются ВСЕ записи из категории "Albums", вместо одной.

Добавление

$wp_query->set('posts_per_page',1);

не даёт эффекта.

Что я должен сделать вместо этого?

Бонусный вопрос: есть ли где-то хороший справочник по манипуляции с query таким образом?

1
Комментарии

Похожие вопросы и ответы

kaiser kaiser
30 июн. 2014 г. 15:56:55
Все ответы на вопрос 4
1

Мне пришлось делать то же самое для клиента, и я нашел два полезных ресурса, которые мне помогли:

Как использовать пользовательский тип записи (CPT) в качестве главной страницы?

http://wpquestions.com/question/show/id/2944

12 окт. 2011 г. 13:01:15
Комментарии

Ответы должны быть больше, чем просто ссылки. Они должны действительно содержать решение проблемы, а не просто направлять туда, где пользователь возможно найдёт ответ. Пожалуйста, помогите предотвратить устаревание ссылок, [отредактируйте] свой ответ и предоставьте необходимую информацию, которая поможет автору вопроса и будущим посетителям решить их проблему.

kaiser kaiser
30 июн. 2014 г. 15:56:06
0

Самый простой способ отобразить отдельную запись на главной странице:

global $wp_query;
$wp_query = new WP_Query( array( 'p' => 'ID ЗАПИСИ ЗДЕСЬ' ) );
include( 'single-TИП_ЗАПИСИ.php' );
14 окт. 2011 г. 16:23:18
1

Вот решение, которое сработало у меня:

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> на машинное имя вашего пользовательского типа записи

8 июл. 2013 г. 19:55:16
Комментарии

Это больше не работает. Вам нужно избавиться от второго аргумента $r. Лучше использовать ответ Мэтью: http://wordpress.stackexchange.com/a/126271/30597

norman.lol norman.lol
1 мая 2016 г. 17:14:04
0

https://wordpress.org/plugins/mpress-custom-front-page/ похоже реализует правильную логику в чистом виде.

Github https://github.com/wpscholar/mpress-custom-front-page/

3 окт. 2016 г. 17:38:00