【问题标题】:How to get orders by user meta data in WooCommerce如何在 WooCommerce 中通过用户元数据获取订单
【发布时间】:2021-11-13 22:49:28
【问题描述】:

我想知道,如何查看所有订单:

  • 用户元密钥:friseur
  • 用户元值:TestFriseur

这是我的代码:

// Users query
$user_ids = (array) get_users([
    'role'       => 'customer',
    'number'     => - 1,
    'fields'     => 'ID',
    'meta_query' => [
        'relation' => 'OR',
        [
            'key'     => 'TestFriseur',
            'compare' => '!=',
            'value'   => 1
        ],
        [
            'key'     => 'TestFriseur',
            'compare' => 'NOT EXISTS'
        ]
    ],
]);

// Orders query (using the users IDs from the user query)
$orders = wc_get_orders([
    'limit'       => - 1,
    'status'      => ['on-hold','processing','completed'],
    'customer_id' => $user_ids,
]);

// Loop through Order IDs
foreach( $orders as $order ) {
    // Get the Order ID
    echo $order_id = $order->get_id();

    // And so on …
}

但不幸的是没有达到预期的结果。有什么建议吗?

【问题讨论】:

标签: wordpress woocommerce orders usermetadata


【解决方案1】:

要通过用户元数据获取订单,您可以使用带有 WPDB 类的自定义 SQL 查询,例如:

global $wpdb;

// Settings
$meta_key = 'friseur';
$meta_value = 'TestFriseur';

$order_ids = $wpdb->get_col( "
    SELECT DISTINCT ID
    FROM {$wpdb->prefix}posts o
    INNER JOIN {$wpdb->prefix}postmeta om
        ON o.ID = om.post_id
    INNER JOIN {$wpdb->prefix}usermeta um
        ON om.meta_value = um.user_id           
    WHERE o.post_type = 'shop_order'
    AND o.post_status IN ( 'wc-on-hold','wc-processing','wc-completed' )
    AND om.meta_key = '_customer_user'
    AND um.meta_key = '$meta_key'
    AND um.meta_value = '$meta_value'
");

// Loop through order IDs
foreach( $order_ids as $order_id ) {
    echo '<p>Order id = ' . $order_id . '</p>';
    
    // Get an instance of the WC_Order Object
    $order = wc_get_order( $order_id );

    // And so on …
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    • 2015-09-07
    相关资源
    最近更新 更多