WP_Query:添加category__in中断后订购

时间:2017-11-20 18:13:54

标签: wordpress

我有一个WP_Query,它应该获取特定类别中的所有帖子,并根据menu_order输出它们。

我的查询目前看起来像这样:

$courses_query = new WP_Query(array(
    'post_type' => 'course',
    'category__in' => $categories,
    'nopaging' => true,
    'suppress_filters' => true,
    'order' => 'ASC',
    'orderby' => 'menu_order'
  ));

*'course'是一种分层的帖子类型

这就是SQL的样子:

SELECT wp_posts.* FROM wp_posts LEFT JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) WHERE 1=1 AND ( wp_term_relationships.term_taxonomy_id IN (4,5,6,10,11,12,13,14) ) AND wp_posts.post_type = 'course' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') GROUP BY wp_posts.ID ORDER BY wp_posts.menu_order ASC

当我删除category__in时,排序正常。 但是我需要根据菜单顺序显示所有帖子。实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

如果您的$categories格式不正确,则无法获得查询结果。您可以使用int数组或单个int,它们必须与类别的term_id匹配。

WP有时会要求整数而不是包含整数的字符串。尽管它很烦躁,但它有时会返回错误的东西。也许在你的查询之前试试这个:

if (!is_array($categories))
    $categories = [$categories];
$categories = array_filter(array_map(function($c) {
    if (is_string($c) && is_numeric($c))
        $c = intval($c);
    return is_int($c) ? $c : null;
}, $categories);
print_r($categories); // Optional, see what it contains before you try to use it.

请注意,这会修改$categories包含的内容。在运行查询之前,您还可以尝试查看$categories以查看其中包含的内容。