首页 > 解决方案 > 如何使用 PHP 在 WordPress 后端保存元数据

问题描述

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

在这种情况下,它用于文本字段。

我已经为在后端 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'>";     
} 

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

标签: wordpressmetadatacustom-post-typemetasaving-data

解决方案


你快到了。

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

  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' );,因为此操作挂钩仅接收一个参数(帖子 ID),并且

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

/* 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 );
}

推荐阅读