如何解决在 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
对象作为函数参数,并且无需在代码末尾使用 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 文件中。现在应该可以更好地工作,不会抛出错误。
,使用 woocommerce_process_product_meta
钩子,您已经拥有可用的产品 ID 和产品对象。 Here 您会找到更多信息。
要验证按钮是否已被点击,除了 isset()
函数外,您还必须检查其值。
将 value_button
替换为元素的 value
的值
属性
add_action('woocommerce_process_product_meta','update_and_save_utapd',10,2 );
function update_and_save_utapd( $product_id,$product ) {
// replace "value_button" with the value of the element's "value" attribute
if ( isset( $_POST['button_new_update_description'] ) && $_POST['button_new_update_description'] == 'value_button' ) {
if ( $product->is_type('simple') || $product->is_type('variable') ) {
$title = $product->get_name();
$mpn = $product->get_meta('sp_wc_barcode_field');
$description = $product->get_description();
$output = '';
if ( ! empty($title) ) {
$output .= "<p>The " . $title;
}
if ( ! empty($mpn) ) {
$output .= " (MPN: " . $mpn . ").";
}
if ( ! empty($get_description) ) {
$product->set_description($output);
$product->save();
return "<div>SUCCESS: YOU HAVE UPDATED YOUR DESCRIPTION.</div>";
} else {
$product->set_description($output);
$product->save();
return "<div>SUCCESS: YOU HAVE GENERATED A NEW DESCRIPTION.</div>";
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。