我在试着设定一个post__not_in
使用全局$popular
变量,定义在index.php
.
-索引。php-
$popular[] = 1 //post id=1
$popular[] = 2 //post id=2
$popular[] = 3 //post id=3
-功能。php-
function modify_query_exclude_popular($query) {
if ($query->is_main_query() && $query->is_home()){
global $popular;
$query->set(\'post__not_in\', $popular);
}
}
add_action(\'pre_get_posts\', \'modify_query_exclude_popular\' );
我只是不能让它工作,循环正在工作,但流行的post\\u id并不排除在外。我尝试了一切:定义一个常量,使用“create\\u function”等。。。
PS:如果我设置$popular
函数内的数组modify_query_exclude_popular()
它确实可以工作,但我绝对需要设置数组index.php
(the$popular
使用另一个循环的post\\u id)。
SO网友:s_ha_dum
你必须申报$popular
在使用之前要做到全球化。根据您发布的代码,您还没有这样做。
global $popular;
$popular[] = 1 //post id=1
$popular[] = 2 //post id=2
$popular[] = 3 //post id=3
然而,如果你是指
index.php
在主题中,并不总是使用该文件。您可能在需要时不加载的文件中定义变量。由于您发布的代码有限,很难判断是否是这种情况。
pre_get_posts
将在任何主题文件之前运行,除非functions.php
(或其中包含的任何文件)。您可以从该过滤器和header.php
向自己证明这一点。
此外,可能还有比声明全局变量更好的方法。同样,由于代码有限,很难说。
总的来说,听起来你需要重新思考如何实现这一目标。更好地描述你正在努力实现的目标会有所帮助。
参考文献
http://php.net/manual/en/language.variables.scope.php