Понимание и использование метабоксов в сообщениях
Я разрабатываю свою первую тему, которая не зависит от родительской темы, но я сталкиваюсь с некоторыми внутренними проблемами. Я пытаюсь добавить метабокс ко всем публикуемым сообщениям. Этот вопрос довольно широк в том смысле, что он охватывает довольно много функций. Так что, если это предпочтительнее, я разрежу его на куски по нескольким постам на этом сайте. На данный момент я опубликую их как одно целое.
Как уже было сказано, я пытаюсь добавить некоторые поля, в которых авторы могут по желанию заполните дополнительную информацию, например источник, где они нашли большую часть своей информации, и домашнюю страницу контакта с прессой. Основываясь на этом замечательном ответе на предыдущий вопрос, я решил скопировать и отредактировать этот код, и в итоге я получил следующее.
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. показать эти данные в поле ввода после сохранения, чтобы пользователь знал, что что-то уже заполнено.
Кроме того, я хочу добавить дополнительное поле (как сказано) в ту же оболочку. Т. е. также под заголовком "Брон". Это поле должно вести себя аналогично приведенному выше: может быть заполнено автором по желанию, и когда он заполнен, я должен иметь возможность воспроизвести его содержимое в шаблоне. Я предполагаю, что могу добавить еще один метабокс в add_source_metabox
, но мне понадобится еще один обратный вызов и функция сохранения?
1 answers
Чтобы сохранить:
// 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;
Нет необходимости регистрировать другой метабокс и писать другой обратный вызов. Просто продублируйте первую партию echo
в output_source_metabox()
и измените метку и имя.
Чтобы заполнить значение сохраненными данными:
echo '<input ... value="' . esc_attr( get_post_meta( $post_id, 'field_name', true ) ) . '" ... />';
Вам понадобится еще один блок "сохранить" для этого второго поля - просто не забудьте поменять местами input_name
для name
ввода и field_name
для мета-ключа, в котором вы хотите сохранить эти данные.