查询不存在元数据的WooCommerce订单

时间:2019-05-14 作者:SamXronn

我正在尝试获取所有WooCommerce订单,其中一些附加元数据等于不为空。

$orders = wc_get_orders( array(
    \'orderby\'   => \'date\',
    \'order\'     => \'DESC\',
    \'meta_query\' => array(
        array(
            \'key\' => \'var_rate\',
            \'compare\' => \'NOT EXISTS\',
        )
    )
));
所以如果var_rate 为空或不存在,则不要返回该记录。此时,使用这些参数返回所有订单。

空记录示例-

object(WC_Meta_Data)#2344 (2) {
  ["current_data":protected]=>
  array(3) {
    ["id"]=>
    int(6471)
    ["key"]=>
    string(15) "var_rate"
    ["value"]=>
    NULL
  }
  ["data":protected]=>
  array(3) {
    ["id"]=>
    int(6471)
    ["key"]=>
    string(15) "var_rate"
    ["value"]=>
    NULL
  }
}

2 个回复
最合适的回答,由SO网友:LoicTheAztec 整理而成

这个meta_query 参数(可以在WP_Query)WC_Order_Query 通过wc_get_orders() WooCommerce功能。

但对于你来说,可以使用无文件的Custom Field Parameters (就像在WP_Query)

  • meta_key
  • meta_value
  • meta_value_num
  • meta_compare

    $orders = wc_get_orders( array(
        \'limit\'        => -1, // Query all orders
        \'orderby\'      => \'date\',
        \'order\'        => \'DESC\',
        \'meta_key\'     => \'var_rate\', // The postmeta key field
        \'meta_compare\' => \'NOT EXISTS\', // The comparison argument
    ));
    
    这次它工作得很好(在WooCommerce 3.5.8和3.6.2上进行了测试)。

SO网友:Sally CJ

显然,WooCommerce忽视了meta_query 参数,所以这就是为什么您得到所有订单。

您可以使用此代码使meta_query 参数用于WooCommerce(订单)查询:

add_filter( \'woocommerce_get_wp_query_args\', function( $wp_query_args, $query_vars ){
    if ( isset( $query_vars[\'meta_query\'] ) ) {
        $meta_query = isset( $wp_query_args[\'meta_query\'] ) ? $wp_query_args[\'meta_query\'] : [];
        $wp_query_args[\'meta_query\'] = array_merge( $meta_query, $query_vars[\'meta_query\'] );
    }
    return $wp_query_args;
}, 10, 2 );
但正如我在评论中指出的,要查询所有订单var_rate 元数据不是空的,请设置compare!=:

\'meta_query\' => array(
    array(
        \'key\'     => \'var_rate\',
        \'compare\' => \'!=\',
        \'value\'   => \'\',
    ),
),
在使用单个元查询进行查询的情况下,只需使用meta_key 参数以及meta_comparemeta_value, 无需使用meta_query 参数:

\'meta_key\'     => \'var_rate\',
\'meta_compare\' => \'!=\',
\'meta_value\'   => \'\',
这样,您就不必使用上面“启用”的代码meta_query 参数

更新我想我没有真正注意到问题的标题。。我想我应该补充这些:

在问题的标题中,您可以看到“元数据的作用not exist为此\'compare\' => \'NOT EXISTS\'\'meta_compare\' => \'NOT EXISTS\' 是你需要的。

但在问题的正文中,您说了“,其中一些额外的元数据等于not empty如果var_rate 为空或不存在do not return that record为此\'compare\' => \'!=\'\'meta_compare\' => \'!=\' 是你需要的。

因为当comparemeta_compare 设置为!=, 以及valuemeta_value 设置为\'\' (默认值,如果未明确指定),则表示“查找数据库中存在元数据且值不为空(不为空)的记录\'\' 还是不NULL)“。

我希望这能有所帮助。:)

相关推荐

如何将JQuery加载到Head标记之上

我的网站和插件在HTML标记之间插入了一些jquery代码,而且无论我做什么,都会在标题部分插入jquery作为第一个脚本,我无法让它工作我试过了function use_jquery_from_google () { if (is_admin()) { return; } global $wp_scripts; if (isset($wp_scripts->registered[\'jquery\']