当前位置: 首页 > 知识库问答 >
问题:

未捕获的错误:调用成员函数get_user_id()WooCommerce订阅

唐照
2023-03-14

我们一直很好地使用WooCommerce订阅,但是当从用户的“我的帐户”部分查看订单时,它开始引起问题,打开WP_DEBUG显示如下:

未捕获的错误:在/wp-content/plugins/woocommerce-subscriptions/includes/wcs-user-functions.html" target="_blank">php:381中调用bool中的成员函数get_user_id()

第381行是:

if ( $user_id === $subscription->get_user_id() ) {
                    $allcaps['edit_shop_subscription_status'] = true;
                }
            break;

鉴于这是一个官方插件,我不确定问题是如何发展的,我也有堆栈跟踪:

堆栈跟踪:#0/wp-inclused/class-wp-hook.php(289):wcs_user_has_capability(数组,数组,数组)#1/wp-inclused/plugin.php(212):wp_hook->apply_filters(数组,数组)#2/wp-inclused/class-wp-user.php(783):apply_filters('user_has_cap',数组,数组,数组,数组,对象(WP_User))#3/wp-inclused/capilities.php

完整的代码块:

/**
 * 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中得到任何东西--它是否只为不在订阅计划中的用户显示错误?任何指针都是非常有用的。

共有1个答案

叶允晨
2023-03-14

由于问题似乎是返回布尔值的wc_subscription对象,请改用:

if ( is_a( $subscription, 'WC_Subscription' ) && $user_id === $subscription->get_user_id() ) {
    $allcaps['edit_shop_subscription_status'] = true;
}

它应该能解决这个问题。

 类似资料:
  • 我收到WordPress发来的关于致命错误的消息。它与WPML字符串翻译插件后端中的特定页面相关。我认为有一个特别的翻译: 访问发现错误的页面(xxxxxxxx/wp admin/admin.php?page=wpml translation management/menu/translations-queue.php) 它还说 错误详细信息===========在文件/nas/content/l

  • 这是三个文件 我得到一个错误“Fatal error:Uncattle error:Call to a member function prepare()on null”。这段代码运行在我的localhost上没有问题,但是当它上传到服务器时,我就出现了这个问题。我在本地使用PHP8和xammp软件。我是三年级学生,请帮帮我。 文件database.php: } 文件admin.php

  • 我正在尝试使用PHP在WooCommerce中创建一个自定义优惠券代码,它基本上会将购物车中标签名为“main”的每件商品的价格折扣到10。它通过计算购物车中标记为“main”的商品数量,然后计算每个商品的总价,并由此计算$折扣变量中所需的折扣。请参见下面的代码: 当我尝试激活此代码时,会收到以下错误消息: 您试图保存的代码段在第4行产生了致命错误: 未捕获错误:在/homepages/9/d39

  • (操作系统:Windows 10;XAMPP v3.2.2;Visual Studio代码1.20.0) 我对php mysqli有一个问题。它说mysqli_connect函数没有定义。我尝试过很多解决方案——甚至在堆栈溢出中——但这些解决方案都不适合我。 我已经将PHP从5升级到7。在我的phpinfo中,似乎没有启用mysqli。所以我检查了是否有php_mysqli。我的php文件夹中的d

  • 好吧,我知道我试图混合mysql和MySQLI....

  • 我想看看我的WordPress主题,我收到了这个错误: 致命错误:未捕获错误:调用未定义的函数have_post()在C:\xampp\htdocs\wordpress\wp-内容\主题\ChachoTheme\index.php: 6堆栈跟踪:#0 C:\xampp\htdocs\wordpress\wp-包括\template-loader.php(74):包括()#1 C:\xampp\HT