Понимание и использование обменов в сообщениях

Я разрабатываю свою первую тему, которая не зависит от родительской темы, но я сталкиваюсь с некоторыми проблемными задачами. Я пытаюсь добавить метабокс ко всем сообщениям, которые пишутся. Этот вопрос довольно широк, поскольку он охватывает довольно много функций. Поэтому, если это предпочтительнее, я разорву его на кусочки, через несколько сообщений на этом сайте. Пока я отправлю их как один.

Как я сказал, я пытаюсь добавить некоторые поля, где авторы могут по желанию заполнить дополнительную информацию, например источник, где они нашли большую часть своей информации и домашнюю страницу контакта с прессой. Основываясь на этом замечательном ответе на предыдущий вопрос, я решил скопировать редактирование этого кода, и в итоге я получил следующее.

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 , но мне нужна другая функция обратного вызова и сохранения?

Сохранить:

 // 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 ) ) . '" ... />'; 

Вам понадобится еще один блок «save» для этого второго поля – просто убедитесь, что вы input_name name входа для name ввода и field_name для мета-ключа, который вы хотите сохранить.