如何使用 PHP 在 WordPress 后端保存元数据

How to save Meta Data in WordPress back-end with PHP

我对使用 PHP 的 WordPress 后端中的 Post 元数据比较陌生。我已经编写了创建元数据的代码。我需要帮助保存我所写的数据。它还需要允许我在保存后编辑数据。

在本例中,它用于文本字段。

我已经为在后端 WordPress 管理区域中显示良好的输入字段创建了元数据。

add_action( 'add_meta_boxes', 'cd_meta_box_add' );
function cd_meta_box_add()
{
    add_meta_box( 'my-meta-box-id', 'Job Title', 'cd_meta_box_cb', 'people', 'normal', 'high' );
    /* Save post meta on the 'save_post' hook. */
    add_action( 'save_post', 'cd_meta_box_add', 10, 2 );
}

function cd_meta_box_cb()  
{  
    echo "<input type='text' name='jobtitle'>";     
} 

我只需要有关将上述元数据保存到数据库并允许编辑和修订的代码方面的帮助

你快到了。

拼图的最后一部分是保存元数据的函数,但首先我们需要对您现有的代码进行一些调整:

  1. add_action( 'save_post', 'cd_meta_box_add', 10, 2 );要移到cd_meta_box_add()外面,

  2. add_action( 'save_post', 'cd_meta_box_add', 10, 2 );改成add_action( 'save_post', 'cd_meta_box_add' );,因为这个action hook只接受一个参数(post ID),

  3. 您需要定义处理数据的函数(它不能像现在那样 cd_meta_box_add 所以我们将创建一个名为 [=18 的新函数=]).

/* Save post meta on the 'save_post' hook. */
add_action( 'save_post', 'save_cd_meta_box_data' );

function save_cd_meta_box_data( $post_id ) {

    // Autosaving, bail.
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return;
    }

    // @TODO
    // You should add some additional security checks here
    // eg. nonce, user capabilities, etc, to prevent
    // malicious users from doing bad stuff.

    /* OK, it's safe for us to save the data now. */

    // Make sure that it is set.
    if ( ! isset( $_POST['jobtitle'] ) ) {
        return;
    }

    // Sanitize user input.
    $my_data = sanitize_text_field( $_POST['jobtitle'] );

    // Update the meta field in the database.
    update_post_meta( $post_id, '_job_title', $my_data );
}
  1. 现在我们已成功将元数据保存到数据库中,让我们允许用户查看/编辑它:
function cd_meta_box_cb( $post )  
{  
    $job_title = get_post_meta( $post->ID, '_job_title', true );
    echo "<input type='text' name='jobtitle' value='" . esc_attr( $job_title ) . "'>";     
}

最终代码应如下所示:

/* Register and display metabox */
add_action( 'add_meta_boxes', 'cd_meta_box_add' );

function cd_meta_box_add()
{
    add_meta_box( 'my-meta-box-id', 'Job Title', 'cd_meta_box_cb', 'people', 'normal', 'high' );
}

function cd_meta_box_cb( $post )  
{  
    $job_title = get_post_meta( $post->ID, '_job_title', true );
    echo "<input type='text' name='jobtitle' value='" . esc_attr( $job_title ) . "'>";     
}

/* Save post meta on the 'save_post' hook. */
add_action( 'save_post', 'save_cd_meta_box_data' );

function save_cd_meta_box_data( $post_id ) {

    // Autosaving, bail.
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return;
    }

    // @TODO
    // You should add some additional security checks here
    // eg. nonce, user capabilities, etc, to prevent
    // malicious users from doing bad stuff.

    /* OK, it's safe for us to save the data now. */

    // Make sure that it is set.
    if ( ! isset( $_POST['jobtitle'] ) ) {
        return;
    }

    // Sanitize user input.
    $my_data = sanitize_text_field( $_POST['jobtitle'] );

    // Update the meta field in the database.
    update_post_meta( $post_id, '_job_title', $my_data );
}