用于edit.php自定义帖子列表的wordpress自定义过滤器

时间:2012-06-16 22:31:04

标签: wordpress filter custom-post-type

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

我一直在搞乱这个问题几个小时但是找不到解决办法。 我希望通过几个元键和值以及发布日期来过滤帖子 这是我用于此事的代码

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参数按预期工作,我从选择框中获取相关数据。

感谢

1 个答案:

答案 0 :(得分: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' );