Получение записей в категории произвольного типа записей
У меня возникли проблемы с получением записей в категории произвольного типа записей. У меня есть код ниже, но он работает неправильно. Он все еще получает записи из другой категории.
<?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(); ?>
Можете мне помочь?
Спасибо

Насколько мне известно, параметра 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

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

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

Я никак не мог заставить ни один из вышеперечисленных методов работать. Они либо возвращали всё, либо ничего. Поэтому после нескольких проб и ошибок я сделал следующее:
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, хотя программировал практически на всех других языках, и я не знаю, хороший это или плохой способ делать вещи. Я просто знаю, что это работает для моих нужд :)

Я знаю, что это старая информация, но я не смог найти четкого ответа. Вот что сработало у меня:
Версия с 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), а затем слаг категории в параметре с таким же именем, как слаг категории для этого типа записи. Надеюсь, это понятно :)
