$WooCommerce->购物车在WordPress REST API内为空

时间:2019-06-25 作者:Jack Robson

我试图在WordPress REST API中向购物车添加一个项目。

这是我目前的代码:

add_action( \'rest_api_init\', function () {
  register_rest_route( \'lufc/v1\', \'/add-to-cart\', array(
    \'methods\' => \'GET\',
    \'callback\' => [ \'add_to_cart\' ],
  ) );
} );

function add_to_cart() {
  global $woocommerce;
  $woocommerce->cart->add_to_cart( 15 );
  die();
}
但它失败了,因为$woocommerce->cart始终为空。

有什么建议吗?

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

是的,这是真的,因为WooCommerce购物车仅在前端初始化(或者如果是前端请求):

但它失败了,因为$woocommerce->cart 始终为空。

所以在WooCommerce 3.6.4 (current release as of writing) or later, 您可以手动初始化购物车,如下所示:

// Load cart functions which are loaded only on the front-end.
include_once WC_ABSPATH . \'includes/wc-cart-functions.php\';
include_once WC_ABSPATH . \'includes/class-wc-cart.php\';

// wc_load_cart() does two things:
// 1. Initialize the customer and cart objects and setup customer saving on shutdown.
// 2. Initialize the session class.
if ( is_null( WC()->cart ) ) {
    wc_load_cart();
}
所以你的add_to_cart() 可能看起来是这样的:

function add_to_cart() {
    defined( \'WC_ABSPATH\' ) || exit;

    // Load cart functions which are loaded only on the front-end.
    include_once WC_ABSPATH . \'includes/wc-cart-functions.php\';
    include_once WC_ABSPATH . \'includes/class-wc-cart.php\';

    if ( is_null( WC()->cart ) ) {
        wc_load_cart();
    }

    // I\'m simply returning the cart item key. But you can return anything you want...
    return WC()->cart->add_to_cart( 15 );
}

旧WooCommerce 3.6的注释。x版本,this article 可能对你有帮助。

正如您所看到的,上面的代码很简单(对我来说效果很好);但是,实际上您可以尝试现有的解决方案:CoCart.

您应该始终使用WC() 访问全球$woocommerce 变量/对象。

我想这只是问题中的一个输入错误:\'callback\' => [ \'add_to_cart\' ] 因为这会导致错误,应该是以下其中之一:

\'callback\' => \'add_to_cart\'
\'callback\' => [ $this, \'add_to_cart\' ]
\'callback\' => [ $my_class, \'add_to_cart\' ]
\'callback\' => [ \'My_Class\', \'add_to_cart\' ]

相关推荐

Testing Plugins for Multisite

我最近发布了一个WordPress插件,它在单个站点上非常有效。我被告知该插件在多站点安装上不能正常工作,我理解其中的一些原因。我已经更新了代码,现在需要一种方法来测试更新后的代码,然后才能转到实时客户的多站点安装。我有一个用于测试的WordPress安装程序的单站点安装,但需要在多站点安装上进行测试。根据我所能找到的唯一方法是在网络上至少有两个站点来安装整个多站点安装,以测试我的插件。设置WordPress的整个多站点安装是插件开发人员的唯一/首选方式,还是有更快的测试环境可用。