我需要根据特定的元键+值在订单列表上创建过滤器.我跟踪了this post条,它帮了我大忙.但是,我需要创建一个符合此规则的筛选器:显示具有元关键字‘_CREATED_VIA’的订单,其值不是‘admin’或‘check out’.

有没有办法在不匹配特定字符串的情况下过滤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;
}

推荐答案

看一下WP_Query documentation for "custom field post meta parameters",您可以使用定义为"NOT IN"meta_compare和定义为array of values…的meta_value

try 以下操作(未经测试):

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

它可以工作.

Php相关问答推荐

Laravel 9如何过滤$的项目与结果?

WordPress:将自定义单选输入字段添加到用户配置文件

如果WooCommerce中存在特定的运输方式,则隐藏其他运输方式

PHP原始数据读取引发max_input_vars错误

在WooCommerce中添加基于类别的固定费用

将数组推送到数组时,数组推送()出现问题

是否重新排序多维数组元素以将所有子数组中的子数组移动到元素列表的底部?

Symfony 6.2 IsGraned具有多个角色

如何在laravel中使用script type= text/html/script

如何从Laravel中的Spatie\Dns\Records\A对象中提取IP地址

PHP:使用FORT从数据库获取USERS表到AUTH表

除WooCommerce中的特定国家/地区外,有条件地要求填写邮政编码 checkout 字段

允许在WooCommerce管理订单列表中使用计费邮箱进行搜索

我不明白为什么我收到未定义的数组键异常错误 - Laravel 9 PHP 8

计算添加到购物车的点击次数并将其显示在 WooCommerce 管理产品列表中

使用产品自定义字段作为 WooCommerce 中特定用户角色的折扣百分比

当我激活插件时出现错误注意:未定义的偏移量:1

防止使用woocommerce_checkout_process下单

按数字然后按字符串对关联 PHP 数组进行排序

即使密码匹配,密码处理程序也会返回错误