【问题标题】:Accessing WooCommerce 2.0 Subscriptions directly直接访问 WooCommerce 2.0 订阅
【发布时间】:2015-02-18 11:05:06
【问题描述】:

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

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

但在 WooCommerce 2.x 中,订阅模式已更改。来自文档:

订阅存储和访问

强烈建议您通过 API 函数访问订阅及其关联的元数据,例如 WC_Subscriptions_Manager::get_subscription()。存储架构计划在订阅 2.0 版中进行更改。 API 函数将保持向后兼容性,但如果直接访问数据,您应该预期您的代码会在 2.0 版本中中断。

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

【问题讨论】:

  • 使用WC_Subscriptions_Manager::get_subscriptions()有什么问题?
  • 它加载了整个 WP 插件 @helgatheviking,这对性能来说是一场最糟糕的噩梦。 :(

标签: php wordpress woocommerce


【解决方案1】:

尝试像这样使用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 成为订阅者。

【讨论】:

    猜你喜欢
    • 2021-05-17
    • 2018-05-25
    • 2017-08-31
    • 2018-04-04
    • 1970-01-01
    • 2015-11-30
    • 2019-01-03
    • 1970-01-01
    • 2015-01-31
    相关资源
    最近更新 更多