wordpress 通过特定的Meta值过滤订单,该元值与Woocommerce管理订单列表中的特定字符串不匹配

holgip5t  于 11个月前  发布在  WordPress
关注(0)|答案(1)|浏览(145)

我需要根据特定的Meta键+值在订单列表上创建一个过滤器。我遵循了this post,它帮助很大。但是,我需要创建一个符合以下规则的过滤器:显示具有元键的订单:'_created_via',其值不是'admin'或'checkout'。
有没有一种方法可以过滤不匹配特定字符串的meta_value?请参阅:$vars['meta_value'] = <NOT 'checkout' or 'admin'>

// Process the filter dropdown for orders
add_filter( 'request', 'process_admin_shop_order_marketing_by_meta', 99 );
function process_admin_shop_order_marketing_by_meta( $vars ) {
    global $pagenow, $typenow;
    
    $filter_id = 'filter_shop_order_by_meta';

    if ( $pagenow == 'edit.php' && 'shop_order' === $typenow 
    && isset( $_GET[$filter_id] ) && ! empty($_GET[$filter_id]) ) {
        $vars['meta_key']   = $_GET[$filter_id];
        $vars['orderby']    = 'meta_value';
        if ($_GET[$filter_id] == '_created_via') {
            $vars['meta_value']    = <NOT 'checkout' or 'admin'>
        }
    }
    return $vars;
}

字符串

pkwftd7m

pkwftd7m1#

查看WP_Query文档中的 “custom field post Meta parameters”,您可以使用定义为 “NOT IN”meta_compare和使用 * 值数组 * 定义的meta_value.
尝试以下操作(未经测试):

add_filter( 'request', 'process_admin_shop_order_marketing_by_meta', 99 );
function process_admin_shop_order_marketing_by_meta( $vars ) {
    global $pagenow, $typenow;
    
    $filter_id = 'filter_shop_order_by_meta';

    if ( 'edit.php' === $pagenow && 'shop_order' === $typenow 
    && isset( $_GET[$filter_id] ) && ! empty($_GET[$filter_id]) ) {
        $vars['meta_key']   = $_GET[$filter_id];
        $vars['orderby']    = 'meta_value';
        if ($_GET[$filter_id] === '_created_via') {
            $vars['meta_compare'] = 'NOT IN';
            $vars['meta_value'] = array( 'checkout', 'admin' );
        }
    }
    return $vars;
}

字符串
它可以工作。

相关问题