最新发布的WordPress WP_Query(),但按类别ID

时间:2019-02-24 11:11:13

标签: wordpress

我是WordPress的新手,正在尝试编辑现有主题(Materialis Pro),以允许我显示最新帖子,但按类别进行细化。

我已经编辑了简码,以便可以从编辑器中传递类别,并且可以在php中检索此值。

用于显示最新帖子的现有代码仅显示最后3个帖子,我想在类别中添加一个categoryId,因此我们仅看到类别X中最近3个帖子。

插件中的现有代码执行以下操作:

 $recentPosts = new WP_Query();
 $recentPosts->query('posts_per_page=' . $post_numbers . ';post_status=publish;post_type=post;ignore_sticky_posts=1;');

通过在线阅读,它应该像将cat = 4或类似的内容传递给该查询一样简单:

$recentPosts->query('cat=4;posts_per_page=' . $post_numbers . ';post_status=publish;post_type=post;ignore_sticky_posts=1;');

但是当我这样做时,我什么也没回来,没有错误,只有帖子。奇怪的是,如果我将其添加到查询的末尾,则会得到结果,但就像完全忽略了该类别。

我已经使用我在短代码中设置的类别ID成功获得了该类别,

$theCategory = get_the_category_by_ID($attrs['shortcode_catId']);

但是我不确定如何将其用作过滤器或将其添加到查询中。 任何指针都非常感谢。

我真的认为这应该很简单,但是我错了,或者至少我没有看到按类别进行过滤或排序的正确方法。

1 个答案:

答案 0 :(得分:1)

说实话,这是我第一次看到WP_Query类被这样使用,所以我不完全了解发生了什么。尝试以下方法:

$args = array(
    'cat' => 4,
    'posts_per_page' => $post_numbers,
    'post_status' => 'publish',
    'post_type' => 'post',
    'ignore_sticky_posts' => 1
);
$recentPosts = new WP_Query($args);

if ( $recentPosts->have_posts() ) {
    // ... rest of the code

或者,您也可以使用category__in参数:

$args = array(
    'category__in' => array(4),
    'posts_per_page' => $post_numbers,
    'post_status' => 'publish',
    'post_type' => 'post',
    'ignore_sticky_posts' => 1
);
$recentPosts = new WP_Query($args);

if ( $recentPosts->have_posts() ) {
    // ... rest of the code