如前所述,不要使用query_posts()
. 甚至WordPress文档也指出:
注:This function isn\'t meant to be used by plugins or themes. 如后文所述,有更好、性能更好的选项来更改主查询。query\\u posts()是一种过于简单且有问题的方法,通过将页面的主查询替换为新的查询实例来修改它。它效率低下(重新运行SQL查询),并且在某些情况下会彻底失败(尤其是在处理POST分页时)。任何现代的WP代码都应该使用更可靠的方法,比如使用pre\\u get\\u posts钩子。
https://codex.wordpress.org/Function_Reference/query_posts
该函数的问题很多,包括对主查询的破坏,这可能会导致插件和主题代码出现意外问题,使用该函数会增加对数据库的查询数量,从而对页面加载时间产生负面影响。我怀疑您对主查询的破坏是您的问题的原因。
如果这是页面的主要查询,则需要:
function pregp_wpse_189739($qry) {
if (is_main_query()) {
$qry->set(\'post_type\',\'brands\');
$qry->set(\'posts_per_page\',99);
$qry->set(\'order\',\'ASC\');
}
}
add_action(\'pre_get_posts\',\'pregp_wpse_189739\');
如果不是主查询,则:
$args = array(
\'post_type\' => \'brands\',
\'order\' => \'ASC\',
\'posts_per_page\' => 99
);
$my_query = new WP_Query($args);
if ($my_query->have_posts()) {
while ($my_query->have_posts()) {
$my_query->the_post();
// you Loop code
}
}
wp_reset_postdata();
我发现
get_posts()
这有点麻烦和尴尬,因为您必须自己编写一些循环,但它应该可以工作,尽管并非所有的循环挂钩都会启动。