这应该很简单,但我无法确定正确语法的一个很好的例子来做到这一点。
我想通过meta_queries过滤我的帖子,但是按指定的meta_key排序。
当我按原样运行代码时会产生无限循环。我只包含问题代码,其他代码是query_post运行的基本循环代码。
此外,所有PHP变量都是正确的,不是问题。
$args2 = array(
'meta_key' => '_count-views_all',
//'meta_value' => $id,
'orderby' => 'meta_value_num',
'order' => $sortOrder,
'posts_per_page' => 9,
'paged' => $paged,
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'contributorid1',
'value' => $id,
'compare' => '='
),
array(
'key' => 'contributorid2',
'value' => $id,
'compare' => '='
)
)
);
$posts = query_posts($args2);
}
这是另一个完全没有交叉引用问题的查询。这两个在同一页面上运行,但它们嵌套在if else语句中
$args1 = array(
//'meta_key' => 'contributorid1',
//'meta_value' => $id,
'order' => $sortOrder,
'orderby' => 'title',
'posts_per_page' => 9,
'paged' => $paged,
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'contributorid1',
'value' => $id,
'compare' => '='
),
array(
'key' => 'contributorid2',
'value' => $id,
'compare' => '='
)
)
);
$posts = query_posts($args1);
答案 0 :(得分:1)
查询对我来说很合理。我认为这种方法遇到无限循环的唯一方法是,如果此查询在post循环中运行。当您按原样使用query_posts时,它将更改全局$ wp_query的状态,该状态用于主帖循环中的指针。
如果它在循环中不断触及query_posts,它将不断更改全局$ wp_query对象的状态,并将当前帖子的指针重置为该新查询的第一个帖子,这最终将创建无限循环。
如果在循环中使用此代码,我建议使用类似
的内容$query = new WP_Query($args2);
if ($query->have_posts()) { ... etc; }
如果您需要在其中设置全局发布数据,请务必在使用完之后正确使用wp_setup_postdata
或$query->the_post()
和wp_reset_postdata
或wp_reset_query
发布全球发布信息。