在帖子中理解和使用元变量

时间:2015-02-14 作者:Bram Vanroy

我正在开发我的第一个主题,它不依赖于父主题,但我遇到了一些后端问题。我正在尝试向所有正在编写的帖子添加元框。这个问题相当广泛,因为它涵盖了相当多的特性。所以,如果这是首选,我会把它切成碎片,在这个网站上的多个帖子。目前,我将把它们作为一个整体发布。

如前所述,我正在尝试添加一些字段,作者可以选择在这些字段中填写其他信息,例如他们找到大部分信息的来源和新闻联系人的主页。基于this great answer 在前面的一个问题上,我开始复制和编辑该代码,最后得出以下结论。

function add_source_metabox(){
    add_meta_box(
        \'source_post_metabox\', \'Bron\', \'output_source_metabox\', \'post\'
    );
}
add_action(\'add_meta_boxes\', \'add_source_metabox\');

function output_source_metabox($post){
    wp_nonce_field(\'source_post_metabox\', \'source_post_metabox_nonce\');

    echo \'<label for="source_post">\';
    echo \'<input type="text" id="source_post" name="source_post" value="" style="width: 80%;max-width: 720px;">\';
    echo \' Voer hier de bron van je bericht in.</label>\';
    echo \'<p>Bv. <em>http://tweakers.net/nieuws/101372/ing-belgie-wil-betalingsgedrag-van-klanten-meer-gebruiken-voor-dienstverlening.html</em></p>\';

}
function save_source_metabox($post_id){
    /*
     * We need to verify this came from our screen and with proper authorization,
     * because the save_post action can be triggered at other times.
     */

    /** Ensure that a nonce is set */
    if(!isset($_POST[\'source_post_metabox_nonce\'])) :
        return;
    endif;

    /** Ensure that the nonce is valid */
    if(!wp_verify_nonce( $_POST[\'source_post_metabox_nonce\'], \'source_post_metabox\')) :
        return;
    endif;

    /** Ensure that an AUTOSAVE is not taking place */
    if(defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE) :
        return;
    endif;

    /** Ensure that the user has permission to update this option */
    if(!current_user_can(\'edit_post\', $post_id)) :
        return;
    endif;

    // Update and save the field so it can be used in our template

}
add_action(\'save_post\', \'save_source_metabox\');
如下所示:

source

但问题是,在新的输入字段中输入数据并保存帖子时,该字段为空。我并不感到惊讶,因为我认为我还没有保存这些数据,这部分数据在save_source_metabox. 所以我仍然需要的是:1。保存输入并了解如何2。从我的模板中访问该数据,以及3。保存后在输入字段中显示该数据,以便用户知道已经填写了某些内容。

此外,我想向同一包装器添加一个额外字段(如上所述)。一、 e.也在“Bron”标题下。此字段的行为应该与上面的字段类似:可以由作者随意填写,填写后我应该能够在模板中回显其内容。我猜我可以在add_source_metabox, 但我需要另一个回调和保存函数?

1 个回复
最合适的回答,由SO网友:TheDeadMedic 整理而成

要保存:

// Update and save the field so it can be used in our template
if ( isset( $_POST[\'input_name\'] ) ) {
    $data = sanitize_text_field( $_POST[\'input_name\'] );
    update_post_meta( $post_id, \'field_name\', $data );
}
阅读:

$data = get_post_meta( $post_id, \'field_name\', true );
// With post object, a leaner, cleaner method:
$data = $post->field_name;
无需注册另一个metabox&;编写另一个回调。只需复制第一批echo 在里面output_source_metabox() 并更改标签;名称

要使用保存的数据填充值,请执行以下操作:

echo \'<input ... value="\' . esc_attr( get_post_meta( $post_id, \'field_name\', true ) ) . \'" ... />\';
第二个字段需要另一个“保存”块-只需确保交换input_name 对于name 输入,以及field_name 对于要将此数据存储为的元密钥。

结束