2017年11月更新:
- 更正了一些错误,清除并添加了可用选项
- 最后,为自定义字段段添加了“用法”和“命名约定”。
1)您在自定义帖子类型Metabox中创建了一个自定义标签(此处为“产品”),
2)然后您可以添加字段以填充此标签,其中包含不同类型的字段(您会找到每种类型中的一个,所以这是一个非常完整的示例)。
最后,您将找到一个在提交时保存数据的函数。
这是您将在视觉上获得的(对于6种不同的自定义字段类型):
以下是相关代码:
// Step 1 - Adding a custom tab to the Products Metabox
add_filter( 'woocommerce_product_data_tabs', 'add_shipping_costs_product_data_tab', 99 , 1 );
function add_shipping_costs_product_data_tab( $product_data_tabs ) {
$product_data_tabs['shipping-costs'] = array(
'label' => __( 'Shipping costs', 'my_theme_domain' ), // translatable
'target' => 'shipping_costs_product_data', // translatable
);
return $product_data_tabs;
}
// Step 2 - Adding and POPULATING (with data) custom fields in custom tab for Product Metabox
add_action( 'woocommerce_product_data_panels', 'add_shipping_costs_product_data_fields' );
function add_shipping_costs_product_data_fields() {
global $post;
$post_id = $post->ID;
echo '<div id="shipping_costs_product_data" class="panel woocommerce_options_panel">';
## THE 6 DIFFERENT FIELD TYPES
# 1. Text input field
woocommerce_wp_text_input( array(
'id' => '_input_text',
// 'name' => '_input_text', // (optional) for different ID attribute than name attribute
// 'class' => 'some-class', // (optional)
// 'wrapper_class' => 'show_if_simple', // (optional) example here for simple products type only
'placeholder' => __( 'Enter some data', 'theme_domain' ), // (optional)
'label' => __( 'input text Label', 'theme_domain' ), // (optional)
'description' => __( 'input text Description', 'theme_domain' ), // (optional)
'desc_tip' => true, // (optional) To show the description as a tip
// 'data_type' => '', // (optional formatting options) can be 'price', 'decimal', 'stock' or 'url'
// 'type' => '', // (optional additional custom attribute)
// 'value' => $value, // (optional) for a static value (can be conditionally set for $value variable)
) );
// 2. Textarea input field
woocommerce_wp_textarea_input( array(
'id' => '_input_textarea',
// 'name' => 'input_textarea', // (optional) for different ID attribute than name attribute
'class' => 'widefat', // (optional)
// 'style' => '' // (optional)
// 'wrapper_class' => 'show_if_simple', // (optional) example here for simple products type only
'placeholder' => __( 'Enter some data', 'theme_domain' ), // (optional)
'label' => __( 'input textarea Label', 'theme_domain' ),
'description' => __( 'input textarea Description', 'theme_domain' ),
'desc_tip' => true, // (optional) To show the description as a tip
// 'rows' => 2, // (optional) defining number of rows
// 'cols' => 20, // (optional) defining number of columns
// 'value' => $value, // (optional) for a static value (can be conditionally set for $value variable)
) );
// 3. Checkbox field
woocommerce_wp_checkbox( array(
'id' => '_input_checkbox',
// 'name' => 'input_checkbox', // (optional) for different ID attribute than name attribute
// 'class' => 'some-class', // (optional)
// 'wrapper_class' => 'show_if_simple', // (optional) example here for simple products type only
'label' => __( 'input checkbox Label', 'theme_domain' ),
'description' => __( 'input checkbox Description', 'theme_domain' ),
'desc_tip' => true, // (optional) To show the description as a tip
// 'cbvalue' => 'yes', // to make it selected by default
// 'value' => $value, // (optional) for a static value (can be conditionally set for $value variable)
) );
// 4. Radio Buttons field
woocommerce_wp_radio( array(
'id' => '_input_radio',
// 'name' => 'input_radio', // (optional) for different ID attribute than name attribute
// 'class' => 'some-class', // (optional)
// 'wrapper_class' => 'show_if_simple', // (optional) example here for simple products type only
'label' => __(' ', 'my_theme_domain'),
'description' => __( 'input Radio Description', 'my_theme_domain' ),
'desc_tip' => true,
'options' => array(
'option_value_1' => __('Displayed option 1'),
'option_value_2' => __('Displayed option 2'),
'option_value_3' => __('Displayed option 3'),
),
// 'value' => $value, // (optional) for a static value (can be conditionally set for $value variable)
) );
// 5. Select field
woocommerce_wp_select( array(
'id' => '_select_field',
// 'name' => '_select_field', // (optional) for different ID attribute than name attribute
// 'wrapper_class' => 'show_if_simple', // (optional) example here for simple products type only
'label' => __(' ', 'my_theme_domain'),
'description' => __( 'input Radio Description', 'my_theme_domain' ),
'desc_tip' => true,
'options' => array(
'' => __('Chose an option'), // Default empty value
'option_value_1' => __('Displayed option 1'),
'option_value_2' => __('Displayed option 2'),
'option_value_3' => __('Displayed option 3')
),
// 'value' => $value, // (optional) for a static value (can be conditionally set for $value variable)
) );
// 6. Hidden input field
woocommerce_wp_hidden_input( array(
'id' => '_hidden_input',
// 'name' => '_hidden_input', // (optional) for different ID attribute than name attribute
'class' => 'some_class',
// 'value' => $value, // (optional) for a static value (can be conditionally set for $value variable)
) );
echo '</div>';
}
// Step 3 - Saving custom fields data of custom products tab metabox
add_action( 'woocommerce_process_product_meta', 'shipping_costs_process_product_meta_fields_save' );
function shipping_costs_process_product_meta_fields_save( $post_id ){
// save the text field data
if( isset( $_POST['_input_text'] ) )
update_post_meta( $post_id, '_input_text', esc_attr( $_POST['_input_text'] ) );
// save the textarea field data
if( isset( $_POST['_input_textarea'] ) )
update_post_meta( $post_id, '_input_textarea', esc_attr( $_POST['_input_textarea'] ) );
// save the checkbox field data
if( isset( $_POST['_input_checkbox'] ) )
update_post_meta( $post_id, '_input_checkbox', esc_attr( $_POST['_input_checkbox'] ) );
// save the radio button field data
if( isset( $_POST['_input_radio'] ) )
update_post_meta( $post_id, '_input_radio', esc_attr( $_POST['_input_radio'] ) );
// save the selector field data
if( isset( $_POST['_select_field'] ) )
update_post_meta( $post_id, '_select_field', esc_attr( $_POST['_select_field'] ) );
// save the hidden input data
if( isset( $_POST['_hidden_input'] ) )
update_post_meta( $post_id, '_hidden_input', esc_attr( $_POST['_hidden_input'] ) );
}
自然,这会在您的活动子主题(或主题)的function.php文件上或任何插件文件中进行。
您必须在步骤2和3中使用相同的自定义字段ID (子名称)。
此代码已经过测试并且功能齐全
您可以在第2步中使用自定义代码,自定义变量或任何类型的函数,将任何选项与ANY DATA一起添加。
用法
要获取或检索数据,您将使用
get_post_meta()
函数来定义Post ID:$custom_field_data = get_post_meta( $post_id, '_custom_field_slug', true );
在哪里:
$post_id
是当前的帖子ID(来自产品,订单,优惠券…帖子类型)。custom_field_slug
是您的自定义字段的ID(子链)。true
或false
:是否返回单个值(数据字符串或数组)每种领域都是相同的过程
建议-自定义字段段名(自定义字段ID)
如果您在自定义字段的子名称的开头不使用下划线字符(
_slug_name
),则在提交数据后(更新按钮),它们将在自定义字段Metabox中显示,并且可供授权用户访问。观看此屏幕快照(在这里我们获得了
input_text
自定义字段slug):
参考:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句