要针对特定的变量产品(及其所有变体),您可以使用post_parent
字段从第$variations
个第三个函数参数(the WP_Post object of the current variation)中直接获得父变量产品ID.
因此,您将改用:
$targeted_ids = array( 1234, 9999 ); // Targeted variable products IDs
if ( in_array( $variation->post_parent, $targeted_ids )) {
// add a custom setting field
}
下面是一个带有输入文本字段的完整代码示例:
// Add custom field(s) to product variations from specific variable products
add_action( 'woocommerce_product_after_variable_attributes', 'add_variation_setting_fields', 10, 3 );
function add_variation_setting_fields( $loop, $variation_data, $variation ) {
$targeted_ids = array( 1234, 9999 ); // Targeted variable product Ids
if ( ! in_array( $variation->post_parent, $targeted_ids ) ) return;
$field_key1 = 'my_custom_field';
woocommerce_wp_text_input( array(
'id' => $field_key1.'['.$loop.']',
'label' => __('Text field Name', 'woocommerce'),
'wrapper_class' => 'form-row',
'placeholder' => __('Text field placeholder', 'woocommerce'),
'description' => __('Text field description', 'woocommerce'),
'desc_tip' => true,
'value' => get_post_meta($variation->ID, $field_key1, 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_key1 = 'my_custom_field';
if ( isset($_POST[$field_key1][$i]) ) {
$variation->update_meta_data($field_key1, sanitize_text_field($_POST[$field_key1][$i]));
}
}
代码位于您的子主题的unctions.php文件中(或在插件中).经过测试,效果良好.
对于多个输入文本字段:
您可以使用以下优化代码版本(where the fields settings are in a reusable custom function):
// Fields settings
function custom_fields_settings() {
return array(
'my_custom_field1' => array(
'label' => __('Text field Name 1', 'woocommerce'),
'placeholder' => __('Text field placeholder 1', 'woocommerce'),
'description' => __('Text field description 1', 'woocommerce'),
),
'my_custom_field2' => array(
'label' => __('Text field Name 2', 'woocommerce'),
'placeholder' => __('Text field placeholder 2', 'woocommerce'),
'description' => __('Text field description 2', 'woocommerce'),
),
'my_custom_field3' => array(
'label' => __('Text field Name 3', 'woocommerce'),
'placeholder' => __('Text field placeholder 3', 'woocommerce'),
'description' => __('Text field description 3', 'woocommerce'),
),
);
}
// Add custom field(s) to product variations from specific variable products
add_action( 'woocommerce_product_after_variable_attributes', 'add_variation_setting_fields', 10, 3 );
function add_variation_setting_fields( $loop, $variation_data, $variation ) {
$targeted_ids = array( 1234, 9999 ); // Targeted variable product Ids
if ( ! in_array( $variation->post_parent, $targeted_ids ) ) return;
foreach( custom_fields_settings() as $field_key => $values ) {
$args = array(
'id' => $field_key.'['.$loop.']',
'wrapper_class' => 'form-row',
'desc_tip' => true,
'value' => get_post_meta($variation->ID, $field_key, true)
);
woocommerce_wp_text_input( array_merge( $args, $values) );
}
}
// 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) {
foreach( custom_fields_settings() as $field_key => $values ) {
if ( isset($_POST[$field_key][$i]) ) {
$variation->update_meta_data($field_key, sanitize_text_field($_POST[$field_key][$i]));
}
}
}