我在过滤器后端有此代码。有三个过滤器。每一个都是单独工作的好。但当我同时运行所有过滤器时,它会返回“或”结果。我需要制作所有三个过滤器“和”
add_filter( \'parse_query\', \'wpse45436_posts_filter\' );
function wpse45436_posts_filter( $query ){
global $pagenow;
$type = \'lessons\';
if (isset($_GET[\'post_type\'])) {
$type = $_GET[\'post_type\'];
}
if ( \'lessons\' == $type && is_admin() && $pagenow==\'edit.php\' && isset($_GET[\'age_band\']) && $_GET[\'age_band\'] != \'\') {
// die("here");
$query->query_vars[\'meta_key\'] = \'dt_age_group\';
$query->query_vars[\'meta_value\'] = $_GET[\'age_band\'];
}
}
add_filter( \'parse_query\', \'wpse45437_posts_filter\' );
function wpse45437_posts_filter( $query ){
global $pagenow;
$type = \'lessons\';
if (isset($_GET[\'post_type\'])) {
$type = $_GET[\'post_type\'];
}
if ( \'lessons\' == $type && is_admin() && $pagenow==\'edit.php\' && isset($_GET[\'module_no\']) && $_GET[\'module_no\'] != \'\') {
$ar = array("A"=>"4-5","B"=>"6-7","C"=>"8-9","D"=>"10-11","E"=>"12-13","F"=>"14-15");
$ar = array_flip($ar);
$chr = array("A","B","C","D","E","F");
$mod_no = $_GET[\'module_no\'];
if ( \'lessons\' == $type && is_admin() && $pagenow==\'edit.php\' && isset($_GET[\'age_band\']) && $_GET[\'age_band\'] != \'\') {
// die("here");
$mod_no = $mod_no.$ar[$_GET[\'age_band\']];
}
$query->query_vars[\'meta_key\'] = \'dt_module_no\';
$query->query_vars[\'meta_value\'] = $mod_no;
$query->query_vars[\'meta_compare\'] = \'LIKE\';
}
}
add_filter( \'parse_query\', \'wpse45438_posts_filter\' );
function wpse45438_posts_filter( $query ){
global $pagenow;
$type = \'lessons\';
if (isset($_GET[\'post_type\'])) {
$type = $_GET[\'post_type\'];
}
if ( \'lessons\' == $type && is_admin() && $pagenow==\'edit.php\' && isset($_GET[\'lesson_no\']) && $_GET[\'lesson_no\'] != \'\') {
// die("here");
$query->query_vars[\'meta_key\'] = \'dt_lesson_no\';
$query->query_vars[\'meta_value\'] = $_GET[\'lesson_no\'];
$query->query_vars[\'meta_relation\'] = \'AND\';
}
}
SO网友:jer0dh
由于您正在查询多个meta\\u密钥,因此您需要将meta\\u密钥查询放入一个数组中。一个很好的例子是this posting on StackExchange.
对于每个函数,都需要替换最后三行[\'meta_key\']
, [\'meta_value\']
, 和[\'meta_relation\']
用这样的方式:
if( ! isset($query->query_vars[\'meta_query\']) ) {
$query->query_vars[\'meta_query\'] = array();
}
// setup this functions meta values
$meta = array (
\'key\' => \'dt_module_no\',
\'value\' => $mod_no,
\'compare\' => \'LIKE\'
);
// append to meta_query array
$query->query_vars[\'meta_query\'][] = $meta;
默认情况下,meta\\u查询中的每个数组都将在查询中使用“AND”。
此代码未经测试。