php - 在 WooCommerce 中自动生成简单或可变的产品描述
问题描述
我已经构建了以下函数以与编辑产品页面上显示的按钮一起使用。它旨在根据产品的标题和 SKU 生成一些描述文本。该代码非常适用于“简单”产品,但我正在努力让它也适用于“可变”产品。
我到底需要做什么才能使其对简单产品和可变产品都能正常工作?
当前的行为是:
- 当在简单产品上触发时,它会添加新描述或将旧描述更新为新描述。
- 当在可变产品上触发时,它会更新主要描述,但会删除之前在产品上设置的所有变体。
add_action('woocommerce_process_product_meta', 'update_and_save_utapd');
function update_and_save_utapd() {
if(isset($_POST['button_new_update_description'])){
$product_id = wc_get_product(get_the_ID());
$wcProduct = new WC_Product($product_id);
$get_title = $wcProduct->get_name();
$get_mpn = $wcProduct->get_meta('sp_wc_barcode_field');
$get_description = $wcProduct->get_description();
$output = '';
if(!empty($get_title)){
$output .= "<p>The " . $get_title;
}if(!empty($get_mpn)){
$output .= " (MPN: " . $get_mpn . ").";
}if(!empty($get_description)){
$wcProduct->set_description($output);
$wcProduct->save();
return "<div>SUCCESS: YOU HAVE UPDATED YOUR DESCRIPTION.</div>";
}elseif(empty($get_description)){
$wcProduct->set_description($output);
$wcProduct->save();
return "<div>SUCCESS: YOU HAVE GENERATED A NEW DESCRIPTION.</div>";
}
}
}
解决方案
首先,当在后端使用保存产品数据的操作挂钩时,您不能像尝试那样返回字符串(文本),无论如何,它永远不会显示
现在,从 WooCommerce 3 开始,您可以使用woocommerce_admin_process_product_object
更好的钩子,其中包含WC_Product
Object 作为函数参数,并且无需save()
在代码末尾使用方法,因为一旦触发此钩子,save() 方法就会自动应用。
所以我们可以简化你的代码:
add_action('woocommerce_admin_process_product_object', 'update_and_save_utapd');
function update_and_save_utapd( $product ) {
if( isset($_POST['button_new_update_description']) ){
$name = $product->get_name();
$barcode = $product->get_meta('sp_wc_barcode_field');
$output = '';
if ( ! empty($name) ) {
$output .= "<p>The " . $name;
}
if ( ! empty($barcode) ) {
$output .= " (MPN: " . $barcode . ").";
}
$product->set_description( $output );
}
}
代码位于活动子主题(或活动主题)的 functions.php 文件中。它现在应该可以更好地工作,而不会引发错误。
推荐阅读
- java - Pie上的Camera2 API超出范围异常
- python - 用于预测的分类变量的线性回归
- node.js - 如何在 lambda 上执行 nodejs 中的 ping 命令?
- python - 如何在seaborn中绘制两列的值
- java - 当多个用户访问同一个 API 时,Java 中的相同变量是否会更新?
- javascript - 如何将数组传递给 Vue.js 中的 IFrame 元素?
- java - 错误:(3, 32) java: 包 org.antlr.v4.runtime.dfa 不存在
- mybatis - 在mybatis上全局添加带有分布式跟踪id的sql注释
- javascript - 当登录用户为假时,React 上的 PrivateRoute 不会重定向
- python - 属性的魔术模拟设置值仅获取第一个值