0

我有一个自定义订单帖子,我希望在管理菜单中为列表视图(选择下拉菜单)实施一个额外的过滤器。

我已经搞砸了几个小时,但找不到解决方案。我希望通过几个元键和值过滤帖子,并且按发布日期这是我用于此问题的代码

add_filter( 'parse_query', 'order_posts_filter' );

function order_posts_filter( $query ){
    global $pagenow,$wpdb;
    $type = 'post';
    if (isset($_GET['post_type'])) {
        $type = $_GET['post_type'];
    }
    if ( 'orders' == $type && is_admin() && $pagenow=='edit.php' && isset($_GET['ADMIN_FILTER_FIELD_VALUE']) && $_GET['ADMIN_FILTER_FIELD_VALUE'] != '') {
        $query->query_vars['post_date'] = $_GET['ADMIN_FILTER_FIELD_VALUE'];
    }
    if ( 'orders' == $type && is_admin() && $pagenow=='edit.php' && isset($_GET['ADMIN_FILTER_STATUS_VALUE']) && $_GET['ADMIN_FILTER_STATUS_VALUE'] != '') {
        $query->query_vars['meta_key'] = 'order_status';
        $query->query_vars['meta_value'] = $_GET['ADMIN_FILTER_STATUS_VALUE'];
    }
    return $query;
}

我在这里做错了什么?我的 $_GET 参数按预期工作,我正在从选择框中获取相关数据。

谢谢

4

1 回答 1

0

我正在使用这个:

function wpse454363_posts_filter( $query ){
global $pagenow;
$type = 'post';
if (isset($_GET['post_type'])) {
    $type = $_GET['post_type'];
}
if ( 'product' == $type && is_admin() && $pagenow=='edit.php') {
    $meta_query = array(); // Declare meta query to fill after
    if (isset($_GET['post_date']) && $_GET['post_date'] != '') {
        // first meta key/value
        $meta_query[] = array (
            'key'      => 'post_date',
            'value'    => $_GET['post_date']
        );
    }
    if (isset($_GET['order_status']) && $_GET['order_status'] != '') {
        // second meta key/value
        $meta_query[] = array (
            'key'      => 'order_status',
            'value'    => $_GET['order_status']
        );
    }
    $query->query_vars['meta_query'] = $meta_query; // add meta queries to $query
}
}

add_filter( 'parse_query', 'wpse454363_posts_filter' );
于 2018-04-23T07:10:52.480 回答