我有一个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
时,排序正常。
但是我需要根据菜单顺序显示所有帖子。实现这一目标的最佳方法是什么?
答案 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
以查看其中包含的内容。