直接访问 WooCommerce 2.0 订阅

Accessing WooCommerce 2.0 Subscriptions directly

我一直以这种方式直接从我的 Wordpress 安装访问 WooCommerce 订阅:

SELECT * FROM `wp_usermeta`
    WHERE `meta_key` LIKE '%woocommerce_subscriptions'
    AND   `user_id`=0000

但是对于 WooCommerce 2.x,订阅架构已更改。来自文档:

Subscription Storage & Access

It is strongly recommended you access subscriptions and their associated meta data through API functions, like WC_Subscriptions_Manager::get_subscription(). The storage schema is scheduled to be changed with Subscriptions version 2.0. API functions will maintain backwards compatibility, but if accessing data directly, you should expect your code to break with version 2.0.

有没有人知道如何使用 WooCommerce 2.x 直接从数据库访问订阅数据?

尝试像这样使用 meta_value

SELECT Count({$wp_prefix}woocommerce_order_itemmeta.meta_value) > 0 AS mVal
FROM   {$wp_prefix}woocommerce_order_itemmeta
       LEFT JOIN {$wp_prefix}woocommerce_order_items
              ON {$wp_prefix}woocommerce_order_itemmeta.order_item_id =
                 {$wp_prefix}woocommerce_order_items.order_item_id
       LEFT JOIN {$wp_prefix}postmeta
              ON {$wp_prefix}postmeta.post_id = {$wp_prefix}woocommerce_order_items.order_id
       LEFT JOIN {$wp_prefix}posts
              ON {$wp_prefix}postmeta.post_id = {$wp_prefix}posts.id
WHERE  ( {$wp_prefix}woocommerce_order_itemmeta.meta_key IN (
                  '_subscription_status-Yikes', '_subscription_end_date',
                  '_subscription_start_date-Yikes',
                  '_subscription_period- Yikes' ) )
       AND post_status != 'wc-pending'
       AND {$wp_prefix}postmeta.meta_value = (SELECT id
                                        FROM   {$wp_prefix}users
                                        WHERE  user_url = 'http://{$subDomain}')
       AND {$wp_prefix}woocommerce_order_itemmeta.meta_value = 0;

其中 {$wp_prefix} 应该是您的前缀。最终代码为:

$subscription = mysqli_fetch_array(mysqli_query($conn, "SELECT COUNT({$wp_prefix}woocommerce_order_itemmeta.meta_value) > 0 AS mVal FROM {$wp_prefix}woocommerce_order_itemmeta LEFT JOIN {$wp_prefix}woocommerce_order_items ON {$wp_prefix}woocommerce_order_itemmeta.order_item_id = {$wp_prefix}woocommerce_order_items.order_item_id LEFT JOIN {$wp_prefix}postmeta ON {$wp_prefix}postmeta.post_id = {$wp_prefix}woocommerce_order_items.order_id LEFT JOIN {$wp_prefix}posts ON {$wp_prefix}postmeta.post_id = {$wp_prefix}posts.ID WHERE ({$wp_prefix}woocommerce_order_itemmeta.meta_key IN ('_subscription_status-Yikes', '_subscription_end_date', '_subscription_start_date-Yikes', '_subscription_period- Yikes') ) AND post_status != 'wc-pending' AND {$wp_prefix}postmeta.meta_value = (SELECT ID FROM {$wp_prefix}users WHERE user_url = 'http://{$subDomain}') AND {$wp_prefix}woocommerce_order_itemmeta.meta_value = 0"));
$subscription = $subscription[0];

测试 $subscription 成为 1 订阅者。