PRE_GET_POSTS:‘POST__NOT_IN’不适用于全局变量

时间:2013-04-22 作者:hawkidoki

我在试着设定一个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)。

2 个回复
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

SO网友:T.Todua

指数php文件在pre_get_posts 钩因此,您应该定义$popular 钩子之前的变量。

结束

相关推荐

重力将字段条目形成wp_Query循环

我有一个简单的函数,可以在提交表单(ID 18)时过滤页面内容。它只显示字段(ID 13)的条目。。。add_action(\"gform_after_submission_18\", \"set_post_content\", 10, 2); function set_post_content($entry, $form){ //getting post $post = get_post($entry[\"post_id\"]);