Wordpress orderby查询有时无法正常工作

时间:2014-11-30 02:31:29

标签: php wordpress

我一直在寻找错误,并且不知道是什么原因造成的。

以下代码在大约80%的时间内有效,但有时它只是完全随机的命令:

function filter_where($time, $where = '') {
$where .= " AND post_date > '" . date('Y-m-d H:i:s', strtotime($time)) . "'";
$where .= " AND post_status = 'publish' ";
return $where;
}
add_filter('posts_where', 'filter_where');

$array = array(
    'cat' => 2,
    'meta_key' => 'ratings_score',
    'orderby' => 'meta_value_num',
    'order' => 'DESC',
    'meta_query' => array(
        array(
            'key' => 'ratings_score',
        ),
    ),
    'posts_per_page' => 6
);

filter_where($time);

query_posts($array);

过滤功能有效。我使用不同的$time值和post_status来测试它。

它可能只是某种延迟还是我以错误的方式订购了代码? 有些帖子没有meta_key ratings_score,但cat = 2中的所有帖子都有meta_key

这可能与此问题有关吗?

1 个答案:

答案 0 :(得分:1)

首先,从不使用query_posts

  

注意:此功能并非由插件或主题使用。如后面所述,有更好的,更高性能的选项来改变主查询。 query_posts()是一种过于简单化和有问题的方法来修改页面的主要查询,方法是用新的查询实例替换它。它是低效的(重新运行SQL查询)并且在某些情况下会彻底失败(特别是在处理帖子分页时)。

如果您无法通过使用WP_Query get_posts或pre_get_posts以及 >

您在查询参数之前正确添加了过滤器,但是在查询参数之后再次添加该函数。我相信这是这里的一大问题。您应该在查询参数之后删除过滤器,而不是重新添加它们

替换此行

filter_where($time);

remove_filter('posts_where', 'filter_where');

最后一点,你为什么要定义$time但是你根本没有使用它?