有没有办法可以在产品变体中添加“变体标题”自定义字段,并在手动创建订单时将默认产品标题替换为“变体标题”?
这不会对前端产生任何影响,因为我没有显示单一变体,尽管我之前已经显示过并且我使用的插件提供了此选项。
我需要此选项的原因是为了手动创建订单。
我的绝大多数订单都是订阅,我每个月都会向我的客户发送手动创建的订单。
当我使用插件将变体显示为单个产品时,我能够向我的变量发票产品添加自定义标题,但我可以不再这样做。
以前,当为价格为 9.99 美元的订阅项目添加产品变体时,将使用自定义标题添加该项目:
订阅项目 购买:NZ$9.99
现在我没有使用该插件将变体显示为单个产品,并且没有自定义标题选项,产品变体显示在 Woo 默认庄园中,如下所示:
订阅项目 - NZ$9.99 购买:NZ$9.99
其中“NZ$9.99”是应用于产品变体的属性名称。
当然这可能不是什么大问题,但它使订单看起来很混乱,而且由于产品属性(9.99 新西兰元)也是价格,所以它几乎是多余的。
我试图找到我可能能够适应的替代选项,但我能找到的唯一选项与提供在前端显示单个变体的选项的插件相关。
我在 WPC Show Single Varitions 插件中找到了这个,它似乎至少与我所追求的内容相关,但我不知道如何使用它:
function the_title( $post_title, $post_id ) {
if ( ( $custom_name = get_post_meta( $post_id, 'woosv_name', true ) ) && ! empty( $custom_name ) ) {
return $custom_name;
}
return $post_title;
}
任何帮助将非常感激,因为我不知道从哪里开始。
基于 将变体设置字段添加到 Woocommerce 中的特定可变产品 答案线程,您可以使用以下命令将自定义输入字段添加到变体设置字段:
// Add custom field(s) to product variations
add_action( 'woocommerce_variation_options_pricing', 'add_variation_setting_fields', 10, 3 );
function add_variation_setting_fields( $loop, $variation_data, $variation ) {
$field_key = 'custom_name';
woocommerce_wp_text_input( array(
'id' => $field_key.'['.$loop.']',
'label' => __('Variation Name', 'woocommerce'),
'wrapper_class' => 'form-row',
'description' => __('Add a custom Variation Name', 'woocommerce'),
'desc_tip' => true,
'value' => get_post_meta($variation->ID, $field_key, true)
) );
}
// Save the custom field from product variations
add_action('woocommerce_admin_process_variation_object', 'save_variation_setting_fields', 10, 2 );
function save_variation_setting_fields($variation, $i) {
$field_key = 'custom_name';
if ( isset($_POST[$field_key][$i]) ) {
$variation->update_meta_data($field_key, sanitize_text_field($_POST[$field_key][$i]));
}
}
然后,当使用
get_title()
或 get_name()
方法(用于任何 WooCommerce 订单创建的方法)时,以下挂钩函数将根据您的自定义字段值更改或过滤变体标题或名称:
add_filter( 'woocommerce_product_title', 'custom_variation_title', 10, 2 );
function custom_variation_title( $product_title, $variation ) {
if ( $custom_title = $variation->get_meta('woosv_name') ) {
return $custom_title;
}
return $product_title;
}
add_filter( 'woocommerce_product_variation_get_name', 'custom_variation_name', 10, 2 );
function custom_variation_name( $product_name, $variation ) {
if ( $custom_name = $variation->get_meta('woosv_name') ) {
return $custom_name;
}
return $product_name;
}
代码位于子主题的functions.php 文件中(或插件中)。已测试并有效。