Получение записей в категории произвольного типа записей

7 мая 2013 г., 07:29:27
Просмотры: 60.6K
Голосов: 6

У меня возникли проблемы с получением записей в категории произвольного типа записей. У меня есть код ниже, но он работает неправильно. Он все еще получает записи из другой категории.

<?php
    $query = null;
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $args = array(
        'post_type' => get_post_type(),
        'post_status' => 'publish',
        'paged' => $paged,
        'post_type_cat' => 'featured', // get_post_type() вернет post_type, я добавил _cat -> post_type_cat
        //'orderby' => 'rand',
        'posts_per_page' => 1,
        'meta_query' => array(
            array(
                'key' => '_expiration_date',
                'value' => array(0, current_time('timestamp')),
                'compare' => 'BETWEEN'
                )),
            );
    $query = new WP_Query($args);
?>
<?php if ( $query->have_posts() ) : $query->the_post(); ?>
<?php get_template_part( 'template/featured' ); ?>
<?php else : ?>
<?php get_template_part( 'template/nofeatured' ); ?>
<?php endif; ?>
<?php wp_reset_query(); ?>

Можете мне помочь?

Спасибо

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

Как называется категория?

montrealist montrealist
7 мая 2013 г. 07:59:15
Все ответы на вопрос 3
5

Насколько мне известно, параметра post_type_cat не существует. Вам следует использовать либо cat, либо, если вы запрашиваете записи в пользовательской таксономии, использовать запрос по таксономии.

Пример запроса по категориям:

$query = new WP_Query( 'cat=2,6,17,38' );

или

$query = new WP_Query( 'category_name=staff' );

Дополнительные способы запроса по категориям можно найти в следующей статье Codex:

http://codex.wordpress.org/Class_Reference/WP_Query#Category_Parameters

Пример запроса по таксономии:

$args = array(
    'post_type' => 'post',
    'tax_query' => array(
        array(
            'taxonomy' => 'people',
            'field' => 'slug', //можно установить в ID
            'terms' => 'bob' //если поле field установлено в ID, можно ссылаться на номер категории/термина
        )
    )
);
$query = new WP_Query( $args );

Подробнее об этом можно узнать здесь:

http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters

7 мая 2013 г. 09:01:56
Комментарии

не работает :(

djack109 djack109
30 мая 2020 г. 14:08:52

@djack109 Это работает. Пожалуйста, ознакомьтесь с https://developer.wordpress.org/reference/classes/wp_query. Если у вас остались проблемы после этого, рассмотрите возможность создания вопроса, чтобы люди могли помочь.

Adam Adam
31 мая 2020 г. 18:03:08

Мне удалось заставить это работать, см. ниже

djack109 djack109
31 мая 2020 г. 19:19:22

в данном случае, people — это категория?

Karue Benson Karue Karue Benson Karue
2 июн. 2020 г. 14:50:49

@KarueBensonKarue people — это таксономия. В WordPress есть стандартная таксономия записей category, а также можно создавать пользовательские таксономии, которые позволяют создавать любые другие типы таксономий, как people в данном случае. Лучше всего представлять все "категории" в WP как принадлежащие к какому-либо виду таксономии. Это может быть немного запутанным для новичков. Итак, подводя итог: в WordPress таксономия category по умолчанию применяется к post_type=post, но её также можно привязать и к другим типам записей, как и пользовательские таксономии, или вы можете создать пользовательскую таксономию для любых других целей.

Adam Adam
5 июн. 2020 г. 23:22:24
0

Я никак не мог заставить ни один из вышеперечисленных методов работать. Они либо возвращали всё, либо ничего. Поэтому после нескольких проб и ошибок я сделал следующее:

id — это slug категории, которую я хочу получить.

if (isset($_GET["id"])) {

    $id = $_GET["id"];

    echo $id;

    $id = get_category_by_slug( $_GET["id"] );

    if (isset($id)) {
        $id = $id->term_id;

        $args = array(
            'post_status' => 'publish',
            'post_type' => 'Products',
            'cat' => $id,
        );
    }
}

$query = new WP_Query($args);

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

30 мая 2020 г. 14:10:33
0

Я знаю, что это старая информация, но я не смог найти четкого ответа. Вот что сработало у меня:

Версия с WP_Query:

$args = array(
    "post_type"      => "story", // тип записи
    "story-category" =>  $category->slug // слаг категории
);
$query = new WP_Query( $args );


Версия с get_posts:

$stories = get_posts([
    "post_type"      =>  "story", // тип записи
    "story-category" =>  $category->slug // слаг категории       
 ]);

Все действительно просто. Нужно просто передать тип записи (custom post type), а затем слаг категории в параметре с таким же именем, как слаг категории для этого типа записи. Надеюсь, это понятно :)

11 февр. 2024 г. 23:52:30