解析WordPress和Relationship中的查询过滤器

时间:2017-08-24 作者:Int-khab

我在过滤器后端有此代码。有三个过滤器。每一个都是单独工作的好。但当我同时运行所有过滤器时,它会返回“或”结果。我需要制作所有三个过滤器“和”

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\';
    }
}

1 个回复
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”。

此代码未经测试。

结束

相关推荐

如何更改我的主题页脚中jQuery的顺序?

在我的功能顶部。php是以下代码:function load_theme_scripts() { // Load stylesheets. wp_enqueue_style(\'bootstrap\', get_template_directory_uri() . \'/css/bootstrap.min.css\', array(), \'3.3.5\'); // Load our main stylesheet. wp_enqueue_style(\'info