@DenJel

Wp_query для кастомных типов записей?

Здравствуйте, с помощью плагина types создал кастомный тип записей - участники, на этом же сайте есть стандартный блог. Из блога вывожу записи с помощью
<?php $current_page = (get_query_var('paged')) ? get_query_var('paged') : 1; // определяем текущую страницу блога
    $args = array(
    'posts_per_page' => get_option('posts_per_page'), // значение по умолчанию берётся из настроек, но вы можете использовать и собственное
    'paged'          => $current_page // текущая страница
    );
    query_posts( $args );

    $wp_query->is_archive = true;
    $wp_query->is_home = false; ?>

А подскажите, пожалуйста, как вывести записи из "Участников". Прочитал про Wp_query, он принимает всякие категории, метки и т.д. А тип записей нет.
  • Вопрос задан
  • 1585 просмотров
Решения вопроса 1
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
О боги! Такое ощущение, что все начинающие работать с WordPress учатся по одному какому-то старому уроку, написанному таким же начинающим. Сколько уже исписано - не используйте query_posts. Никогда!

Если нужно получить 1 пост - get_post()
Если нужно получить несколько постов вне контекста - get_posts()
Если нужно модифицировать основной запрос - фильтр pre_get_posts
Во всех остальных случаях - только WP_Query.

В вашей ситуации, если нужно, например, на главной странице, где уже есть основной запрос, дополнительно вывести блок с кастомными записями (участники), делайте secondary loop с помощью WP_Query:

$args = array(
    'post_type' => 'participants' // или как там он у вас называется
    'posts_per_page' => 5,
);
$participants = new WP_Query( $args );
// дальше - loop
if( $participants->have_posts() ) :
    while( $participants->have_posts() ) :
        $participants->the_post();
        // тут выводим пост
    endwhile;
endif;
wp_reset_postdata(); // возвращаем глобальные переменные к состоянию главного запроса


Если же нужно вывести архив ваших участников - просто создайте шаблон archive-participants.php (вместо participants - ваше название custom post types).

Если нужно, чтобы на главной или другом шаблоне участники выводились вперемешку вместе с обычными постами, или подобный сценарий - изменяете параметры основного запроса:

function my_modified_query( $query ) {
    // вместо is_home - проверяйте на соответствующий задаче шаблон
    // is_main_query - чтобы убедиться, что меняем именно основной запрос
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( 'post_type', 'participants' );
        $query->set( 'posts_per_page', 20 );
    }
}
add_action( 'pre_get_posts', 'my_modified_query' );


Судя по всему, английскую документацию вы либо не читали, либо сложно понять всю суть на английском. Есть отличный источник информации на русском: wp-kama.ru/function/wp_query
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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