我需要帮助,以了解如何构造WP_query对象以应用多个条件/过滤器。
在这种情况下,我目前正在使用两个get变量来过滤管理员帖子列表,这两个变量都应与结果帖子列表匹配。我可以使它对一个变量有效,但对两个变量都无效。
设置了get变量后,以下内容可以完美地通过单个get变量(在get变量中标记为“ Notification”,以及ACF数据库密钥为“ author_notified”)来过滤管理帖子列表。
add_filter( 'parse_query', 'filter_admin',15 );
function filter_admin( $query ){
global $pagenow;
$type = 'post';
if (isset($_GET['post_type'])) {
$type = $_GET['post_type'];
}
if ( 'post' == $type && is_admin() && $pagenow=='edit.php' && isset($_GET['Notification']) && $_GET['Notification'] != '') {
$query->query_vars['meta_key'] = 'author_notified';
$query->query_vars['meta_value'] = $_GET['Notification'];
}
}
这将生成一个查询对象,其中WP_query [query_vars] [meta_key]和WP_query [query_vars] [meta_value]以所需的帖子子集为目标。
查询对象应如何构造为以同时匹配两个相似条件的帖子子集为目标?或者更简单地说,我该如何通过两个必须都为真的条件来过滤管理员帖子列表?
我还是PHP / wordpress的新手,不确定如何构造查询对象。任何帮助或建议,将不胜感激!
答案 0 :(得分:1)
已解决,非常感谢@FluffyKitten提供的故障排除提示。
WP_query对象的结构应如下,以实现对管理员帖子列表的多个过滤器。本质上,ACF字段可以使用逻辑运算符添加到WP_query [query_vars] [meta_query]:
[meta_query] => Array
(
[relation] => AND
[0] => Array
(
[key] => author_notified
[value] => 1
[compare] => =
[type] => NUMERIC
)
[1] => Array
(
[key] => recommended_decision
[value] => 0
[compare] => =
[type] => CHAR
)
)
假设已在其他位置设置了名为“ Notification”和“ Recommendation”的GET变量,则可以使用以下函数来实现此查询对象结构:
add_filter( 'parse_query', 'posts_filter2',15 );
function posts_filter2( $query ){
global $pagenow;
$type = 'post';
if (isset($_GET['post_type'])) {
$type = $_GET['post_type'];
}
if ( 'post' == $type && is_admin() && $pagenow=='edit.php') {
$queryParamsCounter = 0;
if (isset( $_GET['Notification'] ) && $_GET['Notification'] != '')
{
$notification = (int)$_GET['Notification'];
$queryParamsCounter++;
}
if (isset( $_GET['Recommendation'] ) && $_GET['Recommendation'] != '')
{
$queryParamsCounter++;
$recommendation = $_GET['Recommendation'];
}
$meta_query = array();
if ($queryParamsCounter > 1) {
$meta_query['relation'] = 'AND';
}
if (isset($notification)) {
$meta_query[] = array(
'key' => 'author_notified',
'value' => $notification,
'compare' => '=',
'type' => 'NUMERIC',
);
}
if (isset($recommendation)) {
$meta_query[] = array(
'key' => 'recommended_decision',
'value' => $recommendation,
'compare' => '=',
'type' => 'CHAR',
);
}
$query->set( 'meta_query', $meta_query);
}
}
请注意,如果仅选择一个过滤器,则不应使用关联键。
我希望这可以帮助其他面临同样挑战的人!