Wordpress:根据网址参数过滤帖子自定义字段值

时间:2017-08-20 13:57:18

标签: php wordpress advanced-custom-fields

我添加了一个自定义'复选框'在名为Advanced Custom Field的插件的帮助下,为我的每个帖子添加字段。字段名称是' country'并根据插件作者,

在新行上输入每个选项。要获得更多控制,您可以指定值和标签,如下所示: 红色:红色 蓝色:蓝色

我自己的价值和标签是这样的:

美国:美国

FR:法国

现在,我想基于'国家'来过滤帖子。场价值。因此,当URL类似于example.com?country=us时,它应显示与USA相关的所有帖子。

我将以下代码添加到我的functions.php中,但它无效。

function my_pre_get_posts( $query ) {

// do not modify queries in the admin
if( is_admin() ) {

    return $query;

}

if( isset($query->query_vars['post_type'] && $query->query_vars['post_type'] == 'post')) {

    // allow the url to alter the query
    if( isset($_GET['country']) ) {

        $query->set('meta_key', 'country');
        $query->set('meta_value', $_GET['country']);

    } 

}


// return
return $query;

}

对于PHP来说,我是一个菜鸟。我做错了什么?

更新:

当我第一次尝试时,它根本不起作用。当我尝试登录我的管理页面时。我又收到了一个错误:

  

Xdebug:致命错误:不能对表达式的结果使用isset()   (你可以使用" null!==表达式"代替)   第14行\ wp-content \ themes \ functions.php

第14行的代码是

if( isset($query->query_vars['post_type'] && $query->query_vars['post_type'] == 'post'))

1 个答案:

答案 0 :(得分:1)

错误消息告诉您问题的确切位置和位置...... 您Cannot use isset() on the result of an expression

行中的if( isset($query->query_vars['post_type'] && $query->query_vars['post_type'] == 'post'))

代码无效,因为无法正确评估第14行中的if语句。

isset将变量(或变量数)作为参数 - 您将它传递给if语句的整个表达式,这是不允许的。您可以使用isset来检查变量是否已设置且不是NULL ,然后再检查它是什么Ref:http://php.net/manual/en/function.isset.php

您需要将代码的第14行更改为以下内容:

if( 
    isset($query->query_vars['post_type']) // check if the post_type query var has a value
    &&                                     // AND if it does...
    $query->query_vars['post_type'] == 'post'  // ... only then check if its == "post"
) 

它可以与示例中的所有行相同(只要删除注释)...我只是将其拆分以突出显示您正在评估的表达式的不同部分。