Wordpress 中的自定义元框未更新 - 需要帮助识别此功能中的错误
Custom Meta Boxes in Wordpress are not updating - need help identifying the errors in this function
我创建了一个小插件,用于将颜色元框添加到自定义 post 类型。该框显示正常,但我似乎无法保存数据。当我在字段中键入内容并单击更新时,字段 returns 为空白。我对此进行了研究并遵循了许多教程,每个教程都提供了略有不同的方法。下面的代码对我来说是最容易理解的,所以如果能帮助我识别其中的错误,我将不胜感激。这是我的第一个问题,很抱歉,如果我遗漏了任何相关内容。
这是我添加框的方式:
add_action( 'add_meta_boxes', 'addmeta' );
function addmeta() {
$post_types = array ('post', 'ev');
foreach ( $post_types as $post_type ) {
add_meta_box (
'color_box',
'Color',
'display_meta_box',
$post_type,
'side'
);
}
}
add_action ( 'add_meta_boxes', 'addmeta');
显示元框的函数:
function display_meta_box() {
$value = get_post_meta( $post->ID, '_mykey', true);
wp_nonce_field( basename( __FILE__ ), 'my_nonce' );
?>
<label for="color_box"><strong>Color:</strong> </label>
<input type="text" name="my_text" id="my_text" />
<?php
}
这是保存函数:
function save_meta_box ( $post_id ) {
$is_autosave = wp_is_post_autosave( $post_id );
$is_revision = wp_is_post_revision( $post_id );
$wp_valid_nonce = false;
if( isset( $_POST[ 'my_nonce' ] ) ) {
if ( wp_verify_nonce( $_POST['my_nonce'], basename( __FILE__ ) ) ) {
$is_valid_nonce = true;
}
}
if ( $is_autosave || $is_revision || !$is_valid_nonce ) return;
if( array_key_exists( 'color_box', $_POST ) ) {
update_post_meta(
$post_id,
'_mykey',
sanitize_text_field( $_POST[ 'color_box' ] )
);
}
}
add_action( 'save_post', 'save_meta_box' );
谢谢!
您在函数的输入框中输入了错误的名称 display_meta_box
。用以下功能替换您的功能。
function display_meta_box() {
global $post;
$value = get_post_meta( $post->ID, '_mykey', true);
wp_nonce_field( basename( __FILE__ ), 'my_nonce' );
?>
<label for="color_box"><strong>Color:</strong> </label>
<input type="text" name="color_box" value="<?php echo $value;?>" id="my_text" />
<?php
}
希望这会有所帮助。如果有任何问题,请告诉我。
您需要定义ID。检查此代码,它将最终起作用。
function display_meta_box( ) {
$value = get_post_meta( get_the_ID(), '_mykey', true);
wp_nonce_field( basename( __FILE__ ), 'my_nonce' );
?>
<label for="color_box"><strong>Color:</strong> </label>
<input type="text" name="color_box" value="<?php echo $value;?>" id="my_text" />
<?php
}
我创建了一个小插件,用于将颜色元框添加到自定义 post 类型。该框显示正常,但我似乎无法保存数据。当我在字段中键入内容并单击更新时,字段 returns 为空白。我对此进行了研究并遵循了许多教程,每个教程都提供了略有不同的方法。下面的代码对我来说是最容易理解的,所以如果能帮助我识别其中的错误,我将不胜感激。这是我的第一个问题,很抱歉,如果我遗漏了任何相关内容。
这是我添加框的方式:
add_action( 'add_meta_boxes', 'addmeta' );
function addmeta() {
$post_types = array ('post', 'ev');
foreach ( $post_types as $post_type ) {
add_meta_box (
'color_box',
'Color',
'display_meta_box',
$post_type,
'side'
);
}
}
add_action ( 'add_meta_boxes', 'addmeta');
显示元框的函数:
function display_meta_box() {
$value = get_post_meta( $post->ID, '_mykey', true);
wp_nonce_field( basename( __FILE__ ), 'my_nonce' );
?>
<label for="color_box"><strong>Color:</strong> </label>
<input type="text" name="my_text" id="my_text" />
<?php
}
这是保存函数:
function save_meta_box ( $post_id ) {
$is_autosave = wp_is_post_autosave( $post_id );
$is_revision = wp_is_post_revision( $post_id );
$wp_valid_nonce = false;
if( isset( $_POST[ 'my_nonce' ] ) ) {
if ( wp_verify_nonce( $_POST['my_nonce'], basename( __FILE__ ) ) ) {
$is_valid_nonce = true;
}
}
if ( $is_autosave || $is_revision || !$is_valid_nonce ) return;
if( array_key_exists( 'color_box', $_POST ) ) {
update_post_meta(
$post_id,
'_mykey',
sanitize_text_field( $_POST[ 'color_box' ] )
);
}
}
add_action( 'save_post', 'save_meta_box' );
谢谢!
您在函数的输入框中输入了错误的名称 display_meta_box
。用以下功能替换您的功能。
function display_meta_box() {
global $post;
$value = get_post_meta( $post->ID, '_mykey', true);
wp_nonce_field( basename( __FILE__ ), 'my_nonce' );
?>
<label for="color_box"><strong>Color:</strong> </label>
<input type="text" name="color_box" value="<?php echo $value;?>" id="my_text" />
<?php
}
希望这会有所帮助。如果有任何问题,请告诉我。
您需要定义ID。检查此代码,它将最终起作用。
function display_meta_box( ) {
$value = get_post_meta( get_the_ID(), '_mykey', true);
wp_nonce_field( basename( __FILE__ ), 'my_nonce' );
?>
<label for="color_box"><strong>Color:</strong> </label>
<input type="text" name="color_box" value="<?php echo $value;?>" id="my_text" />
<?php
}