我添加了一个自定义'复选框'在名为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'))
答案 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"
)
它可以与示例中的所有行相同(只要删除注释)...我只是将其拆分以突出显示您正在评估的表达式的不同部分。