在 add_meta_boxes 中创建的自定义字段再次出现在默认的自定义 Metabox 中
Custom Field created in add_meta_boxes reappearing itself again in the default Custom Metabox
我成功创建了一个内部带有自定义字段的元数据框,我限制它以自定义 post 类型出现。
//define metabox
function product_info_en() {
add_meta_box( 'english_info', 'English Info', 'english_product_name_callback', array('product'), 'normal', 'high' );
}
//add to hook
add_action( 'add_meta_boxes', 'product_info_en' );
在产品页面显示的代码:
// display in add product admin page
function english_product_name_callback( $post ) {
//ob_start();
$content = esc_attr( get_post_meta( get_the_ID(), 'product_desc_en', true ) );
//here goes the custom field
echo '<fieldset><div><label><b>English Product Name:</b></label><br/>';
echo '<input id="product_name_en" type="text" name="product_name_en" style="width:100%; margin:10px 0px"';
echo ' value="';
echo esc_attr( get_post_meta( get_the_ID(), 'product_desc_en', true ) );
echo '"></div></fieldset>';
//here goes the wp_editor
echo '<fieldset><div><label><b>English Product Content Info:</b></label><div><br/>';
echo '<div>';
wp_editor($content, 'product_desc_en', array(
'wpautop' => true,
'media_buttons' => true,
'textarea_rows' => 10
)
);
echo '</div></fieldset>';
}
执行保存工作的代码如下:
//save
function enginfo_save_meta_box( $post_id ) {
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
if ( $parent_id = wp_is_post_revision( $post_id ) ) {
$post_id = $parent_id;
}
$fields = [
'product_name_en',
];
foreach ( $fields as $field ) {
if ( array_key_exists( $field, $_POST ) ) {
update_post_meta( $post_id, $field, sanitize_text_field( $_POST[$field] ) );
}
}
update_post_meta( $post_id,'product_desc_en', wp_kses_post( $_POST['product_desc_en'] ) );
}
add_action( 'save_post', 'enginfo_save_meta_box' );
但是,本应仅进入新创建的元数据框的自定义创建字段将始终显示在默认 "custom field" 中。这发生在所有 post 类型上。
如下图,这里可能是什么问题?
要在默认框中隐藏而不显示您的自定义字段,请在您的自定义字段前加上 下划线 _
,这样 product_desc_en
将变为 _product_des_en
我的意思是您的自定义字段的名称应使用下划线作为前缀,并且 WordPress 默认自定义元数据框将忽略它们并且不会在 WordPress 默认 GUI 中显示,但您可以通过调用在那里使用和显示它们在您自己的自定义元数据框中新的 下划线 前缀名称。
我成功创建了一个内部带有自定义字段的元数据框,我限制它以自定义 post 类型出现。
//define metabox
function product_info_en() {
add_meta_box( 'english_info', 'English Info', 'english_product_name_callback', array('product'), 'normal', 'high' );
}
//add to hook
add_action( 'add_meta_boxes', 'product_info_en' );
在产品页面显示的代码:
// display in add product admin page
function english_product_name_callback( $post ) {
//ob_start();
$content = esc_attr( get_post_meta( get_the_ID(), 'product_desc_en', true ) );
//here goes the custom field
echo '<fieldset><div><label><b>English Product Name:</b></label><br/>';
echo '<input id="product_name_en" type="text" name="product_name_en" style="width:100%; margin:10px 0px"';
echo ' value="';
echo esc_attr( get_post_meta( get_the_ID(), 'product_desc_en', true ) );
echo '"></div></fieldset>';
//here goes the wp_editor
echo '<fieldset><div><label><b>English Product Content Info:</b></label><div><br/>';
echo '<div>';
wp_editor($content, 'product_desc_en', array(
'wpautop' => true,
'media_buttons' => true,
'textarea_rows' => 10
)
);
echo '</div></fieldset>';
}
执行保存工作的代码如下:
//save
function enginfo_save_meta_box( $post_id ) {
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
if ( $parent_id = wp_is_post_revision( $post_id ) ) {
$post_id = $parent_id;
}
$fields = [
'product_name_en',
];
foreach ( $fields as $field ) {
if ( array_key_exists( $field, $_POST ) ) {
update_post_meta( $post_id, $field, sanitize_text_field( $_POST[$field] ) );
}
}
update_post_meta( $post_id,'product_desc_en', wp_kses_post( $_POST['product_desc_en'] ) );
}
add_action( 'save_post', 'enginfo_save_meta_box' );
但是,本应仅进入新创建的元数据框的自定义创建字段将始终显示在默认 "custom field" 中。这发生在所有 post 类型上。 如下图,这里可能是什么问题?
要在默认框中隐藏而不显示您的自定义字段,请在您的自定义字段前加上 下划线 _
,这样 product_desc_en
将变为 _product_des_en
我的意思是您的自定义字段的名称应使用下划线作为前缀,并且 WordPress 默认自定义元数据框将忽略它们并且不会在 WordPress 默认 GUI 中显示,但您可以通过调用在那里使用和显示它们在您自己的自定义元数据框中新的 下划线 前缀名称。