我正在开发我的第一个主题,它不依赖于父主题,但我遇到了一些后端问题。我正在尝试向所有正在编写的帖子添加元框。这个问题相当广泛,因为它涵盖了相当多的特性。所以,如果这是首选,我会把它切成碎片,在这个网站上的多个帖子。目前,我将把它们作为一个整体发布。
如前所述,我正在尝试添加一些字段,作者可以选择在这些字段中填写其他信息,例如他们找到大部分信息的来源和新闻联系人的主页。基于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\');
如下所示:
但问题是,在新的输入字段中输入数据并保存帖子时,该字段为空。我并不感到惊讶,因为我认为我还没有保存这些数据,这部分数据在save_source_metabox
. 所以我仍然需要的是:1。保存输入并了解如何2。从我的模板中访问该数据,以及3。保存后在输入字段中显示该数据,以便用户知道已经填写了某些内容。
此外,我想向同一包装器添加一个额外字段(如上所述)。一、 e.也在“Bron”标题下。此字段的行为应该与上面的字段类似:可以由作者随意填写,填写后我应该能够在模板中回显其内容。我猜我可以在add_source_metabox
, 但我需要另一个回调和保存函数?
最合适的回答,由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
对于要将此数据存储为的元密钥。