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

}