我一直在寻找错误,并且不知道是什么原因造成的。
以下代码在大约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
。
这可能与此问题有关吗?
答案 0 :(得分:1)
首先,从不使用query_posts
注意:此功能并非由插件或主题使用。如后面所述,有更好的,更高性能的选项来改变主查询。 query_posts()是一种过于简单化和有问题的方法来修改页面的主要查询,方法是用新的查询实例替换它。它是低效的(重新运行SQL查询)并且在某些情况下会彻底失败(特别是在处理帖子分页时)。
如果您无法通过使用WP_Query
pre_get_posts
以及 >
您在查询参数之前正确添加了过滤器,但是在查询参数之后再次添加该函数。我相信这是这里的一大问题。您应该在查询参数之后删除过滤器,而不是重新添加它们
替换此行
filter_where($time);
带
remove_filter('posts_where', 'filter_where');
最后一点,你为什么要定义$time
但是你根本没有使用它?