我正在一个运行WordPress
和woocommerce
的网站上工作
我有一个自定义功能来添加到购物车的东西,如下所示:
function custom_add_products_to_cart(){
WC()->cart->empty_cart();
$request_body = file_get_contents('php://input');
$decoded = json_decode($request_body);
$cartElements = $decoded->addToCart;
foreach ( $cartElements as $product_id ) {
WC()->cart->add_to_cart( $product_id );
}
if ( $decoded->Uid ) {
WC()->session->set( 'uid', $decoded->Uid );
}
die();
};
这是一个非常简单的功能。它所做的就是遍历产品ID列表并启动默认的Woocommerce添加到购物车功能。
我得到的问题是,这在我的localhost上完全正常(也调试它的行为就像预期的那样)但是当我在测试服务器上尝试它时它不起作用。
该功能正在激活(我试图打印一些消息)但是购物车没有清空,并且没有添加新产品。
我检查代码,提交和修订,一切都是正确的。
还有什么呢?
我最后的想法是关于PHP的版本:
我的localhost运行7.1.2而测试服务器运行7.0.22 - 它可以是PHP版本吗?关于我还能尝试什么的任何想法?
对不起,如果我不能提供更多细节,但不幸的是,没有更多要添加......
此外,我现在不会将此发布到WordPress社区,因为我认为它不是WordPress相关的东西(也不是woocommerce)而是PHP代码(也许我的功能有点错误?)或PHP版本
在此先感谢大家
我认为问题出在这里
file_get_contents('php://input');
根据您的PHP配置,您可能需要更改php.ini中的allow_url_fopen
设置。
你有两种方法可以绕过它而不用改变php.ini,其中一种是使用fsockopen(),另一种是使用cURL。
我建议在file_get_contents()上使用cURL,因为它是为此而构建的。
最后我通过调用两个函数来解决这个问题:
第一个清空推车:
function empty_cart(){
WC()->cart->empty_cart();
}
第二个继续添加到购物车:
function custom_add_products_to_cart(){
$request_body = file_get_contents('php://input');
$decoded = json_decode($request_body);
$cartElements = $decoded->addToCart;
foreach ( $cartElements as $product_id ) {
WC()->cart->add_to_cart( $product_id );
}
if ( $decoded->Uid ) {
WC()->session->set( 'uid', $decoded->Uid );
}
die();
};
它现在正常工作。