【问题标题】:How to save Meta Data in WordPress back-end with PHP如何使用 PHP 在 WordPress 后端保存元数据
【发布时间】:2019-11-06 16:19:31
【问题描述】:

我对使用 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'>";     
} 

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

【问题讨论】:

    标签: wordpress metadata custom-post-type meta saving-data


    【解决方案1】:

    你快到了。

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 2021-01-10
    相关资源
    最近更新 更多