如何解决尝试更新库存数量时出现woocommerce_update_product问题
当有特定的post_meta时,我正在尝试将产品的库存量设置为零
我迷上了'woocommerce_update_product'。当我单击“更新”时,它将启动并正确更新。但是,动作永远不会结束。 (页面正在加载...)
当我刷新页面并检查库存时,此设置已正确修改。
我做错什么了吗?
这是我的代码
add_action('woocommerce_update_product','sv_set_no_stock_when_discontinued',10,1);
function sv_set_no_stock_when_discontinued($prodId){
$discontinued = get_post_meta($prodId,'_is_discontinued',true);
if($discontinued == 'yes'){
$product = wc_get_product($prodId);
// Using WC setters
$product->set_manage_stock(true);
$product->set_stock_quantity(0);
$product->set_stock_status('outofstock');
// Save Product
$product->save();
}
}
放置一段时间后,出现以下错误:
致命错误:允许的内存大小为1077936128字节已用尽(尝试 在第1078行的\ wp-includes \ meta.php中分配20480个字节)
致命错误:允许的内存大小为1077936128字节已用尽(尝试 分配20480个字节) 第72行的\ wp-includes \ class-wp-fatal-error-handler.php
解决方法
WC_Product对象已经作为woocommerce_update_product
钩子的第二个参数包括在内了...因此,您可以像下面这样更改代码:
add_action( 'woocommerce_update_product','sv_set_no_stock_when_discontinued',10,2 );
function sv_set_no_stock_when_discontinued( $product_id,$product ) {
if( $product->get_meta('_is_discontinued') === 'yes' ) {
// Using WC setters
$product->set_manage_stock(true);
$product->set_stock_quantity(0);
$product->set_stock_status('outofstock');
// Save Product
$product->save();
}
}
但是,因为此钩子位于WC_Product_Data_Store_CPT
类中,所以它与WC_Product
setter方法(尤其是save()
方法)并不真正相似。
因此,我们将其替换为以下内容:
add_action( 'woocommerce_admin_process_product_object','set_no_stock_if_discontinued' );
function set_no_stock_if_discontinued( $product ) {
if( $product->get_meta('_is_discontinued') === 'yes'
|| ( isset($_POST['_is_discontinued'])
&& esc_attr($_POST['_is_discontinued']) === 'yes' ) ) {
// Using WC setters
$product->set_manage_stock(true);
$product->set_stock_quantity(0);
$product->set_stock_status('outofstock');
}
}
代码进入活动子主题(或活动主题)的functions.php文件中。经过测试,可以正常工作。
注意:不需要
save()
方法 ,因为它是在此钩子之后触发的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。