首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未登录错误:调用成员函数get_user_id() WooCommerce订阅

未登录错误:调用成员函数get_user_id() WooCommerce订阅
EN

Stack Overflow用户
提问于 2021-03-11 14:50:28
回答 1查看 931关注 0票数 2

我们一直在使用WooCommerce订阅,但是当查看来自用户"my“部分的订单时,打开WP_DEBUG显示如下所示:

在/wp-content/plugins/woocommerce-subscriptions/includes/wcs-user-functions.php:381中调用bool上的成员函数get_user_id()

第381行是:

代码语言:javascript
复制
if ( $user_id === $subscription->get_user_id() ) {
                    $allcaps['edit_shop_subscription_status'] = true;
                }
            break;

考虑到这是一个官方插件,我不知道一个问题是如何发展的,我也有堆栈跟踪:

堆栈跟踪:#0 /wp-包含/class-wp-hook.php(289):wcs_user_has_capability(Array,Array,Array) #1 /wp-包含/plugin.php(212):WP_Hook->apply_filters(Array,Array) #2 /wp-包含/class-wp-user.php(783):apply_filters(‘user_has’,Array,apply_filters对象(WP_User) #3 /WP-包括/capabilities.php(788):WP_User->has_cap(‘WP_User_WP_User_subsc.,44013) #4 user_can(Object(WP_User),’edit_shop_subsc.‘,( 44013) #5 /wp-content/plugins/tmanager/tmanager.php(76):wcs_get_all_user_actions_for_subscription(Object(WC_O in /wp-content/plugins/woocommerce-subscriptions/includes/wcs-user-functions.php on /wp-content/plugins/woocommerce-subscriptions/includes/wcs-user-functions.php

完整的代码块:

代码语言:javascript
复制
/**
 * Checks if a user has a certain capability
 *
 * @access public
 * @param array $allcaps
 * @param array $caps
 * @param array $args
 * @return array
 */
function wcs_user_has_capability( $allcaps, $caps, $args ) {
    if ( isset( $caps[0] ) ) {
        switch ( $caps[0] ) {
            case 'edit_shop_subscription_payment_method' :
                $user_id  = $args[1];
                $subscription = wcs_get_subscription( $args[2] );

                if ( $subscription && $user_id === $subscription->get_user_id() ) {
                    $allcaps['edit_shop_subscription_payment_method'] = true;
                }
            break;
            case 'edit_shop_subscription_status' :
                $user_id  = $args[1];
                $subscription = wcs_get_subscription( $args[2] );

                if ( $user_id === $subscription->get_user_id() ) {
                    $allcaps['edit_shop_subscription_status'] = true;
                }
            break;
            case 'edit_shop_subscription_line_items' :
                $user_id  = $args[1];
                $subscription = wcs_get_subscription( $args[2] );

                if ( $user_id === $subscription->get_user_id() ) {
                    $allcaps['edit_shop_subscription_line_items'] = true;
                }
            break;
            case 'switch_shop_subscription' :
                $user_id  = $args[1];
                $subscription = wcs_get_subscription( $args[2] );

                if ( $user_id === $subscription->get_user_id() ) {
                    $allcaps['switch_shop_subscription'] = true;
                }
            break;
            case 'subscribe_again' :
                $user_id  = $args[1];
                $subscription = wcs_get_subscription( $args[2] );

                if ( $user_id === $subscription->get_user_id() ) {
                    $allcaps['subscribe_again'] = true;
                }
            break;
            case 'pay_for_order' :
                $user_id = $args[1];
                $order   = wc_get_order( $args[2] );

                if ( $order && wcs_order_contains_subscription( $order, 'any' ) ) {

                    if ( $user_id === $order->get_user_id() ) {
                        $allcaps['pay_for_order'] = true;
                    } else {
                        unset( $allcaps['pay_for_order'] );
                    }
                }
            break;
        }
    }
    return $allcaps;
}
add_filter( 'user_has_cap', 'wcs_user_has_capability', 15, 3 );

使用print_r,$user_id给出了一个结果,但我无法从$subscription中得到任何东西--它是否只显示出一个错误,只针对没有订阅计划的用户?任何指针都是非常精确的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-11 15:13:10

由于罪犯似乎是返回布尔值的WC_Subscription对象,所以请使用:

代码语言:javascript
复制
if ( is_a( $subscription, 'WC_Subscription' ) && $user_id === $subscription->get_user_id() ) {
    $allcaps['edit_shop_subscription_status'] = true;
}

它应该能解决这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66584916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档