SabinaAnisimova29 12.02.2023 06:45

Как использовать пользовательские поля для создания дополнительных настроек записей в WordPress?

Здравствуйте! У меня возникла проблема при работе с пользовательскими полями в WordPress. Я хочу создать дополнительные настройки для записей, но не совсем понимаю, как это сделать. Можете помочь разобраться?

Вот мой код:


function my_custom_fields() {
   add_meta_box('my_custom_fields', 'Дополнительные настройки', 'display_custom_fields', 'post', 'normal', 'high');
}

function display_custom_fields() {
   global $post;
   // Здесь должен быть код для отображения полей
}

function save_custom_fields($post_id) {
   // Здесь должен быть код для сохранения значений полей
}

add_action('admin_init', 'my_custom_fields');
add_action('save_post', 'save_custom_fields');

Я хочу добавить пользовательские поля в раздел "Редактирование записи" на странице создания или редактирования записи. Как правильно прописать функцию display_custom_fields(), чтобы отобразить поля в нужном мне месте? И как сохранить значения этих полей при сохранении записи?

Заранее спасибо за помощь!

Ответы:

ostap45 12.02.2023 07:05

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

Для начала, в вашем коде уже присутствуют две функции: my_custom_fields() и save_custom_fields(). Функция my_custom_fields() используется для добавления нового блока с дополнительными настройками на странице редактирования записи. Функция save_custom_fields() используется для сохранения значений полей при сохранении записи. Вам остается реализовать функцию display_custom_fields(), которая будет отображать поля в нужном месте.

Для отображения полей в функции display_custom_fields() вы можете использовать функции get_post_meta() и wp_nonce_field(). Вот пример:


function display_custom_fields() {
   global $post;

   // Получаем значения полей
   $field_value = get_post_meta($post->ID, 'field_name', true);

   // Выводим поле в HTML
   echo '';
   echo '';

   // Добавляем nonce-поле для безопасности
   wp_nonce_field('save_custom_fields', 'custom_fields_nonce');
}

В этом примере мы используем функцию get_post_meta() для получения значения поля по его имени (в данном случае 'field_name'). Значение поля сохраняется в переменную $field_value. Затем мы выводим HTML-код поля с помощью тега input и подставляем сохраненное значение в атрибут value. Не забудьте использовать функцию esc_attr() для безопасного вывода значения поля.

Также мы добавляем nonce-поле с помощью функции wp_nonce_field(). Это необходимо для обеспечения безопасности сохранения значений полей.

Теперь давайте рассмотрим сохранение значений полей в функции save_custom_fields(). Вот пример:


function save_custom_fields($post_id) {
   // Проверяем, что nonce-поле установлено
   if (!isset($_POST['custom_fields_nonce']) || !wp_verify_nonce($_POST['custom_fields_nonce'], 'save_custom_fields')) {
      return;
   }

   // Проверяем, что пользователь имеет права на редактирование записи
   if (!current_user_can('edit_post', $post_id)) {
      return;
   }

   // Сохраняем значение поля
   if (isset($_POST['field_name'])) {
      update_post_meta($post_id, 'field_name', sanitize_text_field($_POST['field_name']));
   }
}

В этом примере мы используем функцию wp_verify_nonce() для проверки nonce-поля. Если проверка не проходит, значит запрос не является доверенным и мы прекращаем выполнение функции. Затем мы проверяем, что у пользователя есть права на редактирование записи с помощью функции current_user_can(). Если проверка не проходит, мы также прекращаем выполнение функции.

Наконец, мы используем функцию update_post_meta() для сохранения значения поля. В данном примере мы сохраняем значение поля с именем 'field_name' с помощью функции sanitize_text_field() для безопасной обработки текстового значения.

Теперь ваш код должен работать должным образом. Поля будут отображаться на странице редактирования записи, и их значения будут сохраняться при сохранении записи.

Надеюсь, это поможет вам разобраться с проблемой! Удачи!

nikadoktor35 12.02.2023 07:06
Чтобы добавить пользовательские поля в раздел "Редактирование записи" на странице создания или редактирования записи, вам необходимо внести следующие изменения в функцию display_custom_fields():

function display_custom_fields() {
   global $post;
   // Добавляем HTML код для отображения полей
   echo '<p><label for="my_custom_field">Моё пользовательское поле</label><br />';
   echo '<input type="text" id="my_custom_field" name="my_custom_field" value="' . get_post_meta($post->ID, 'my_custom_field', true) . '" /></p>';
}
Давайте разберемся, что происходит в коде: 1. Мы используем функцию `echo` для вывода HTML кода на экран. 2. Мы добавляем `

` тег и `


function save_custom_fields($post_id) {
   // Проверяем, есть ли данные указанного поля
   if (isset($_POST['my_custom_field'])) {
      // Сохраняем значение поля в базу данных WordPress
      update_post_meta($post_id, 'my_custom_field', sanitize_text_field($_POST['my_custom_field']));
   }
}
Давайте разберемся, что происходит в коде: 1. Мы сначала проверяем, существуют ли данные для поля `my_custom_field` в массиве `$_POST`. Это позволяет нам убедиться, что поле было заполнено перед сохранением. 2. Мы используем функцию `update_post_meta()`, чтобы сохранить значение поля в базе данных WordPress. Мы также используем функцию `sanitize_text_field()`, чтобы очистить значение поля от любых потенциально вредоносных символов. Теперь вы должны смочь отобразить пользовательские поля и сохранить их значения при редактировании записей в WordPress. Надеюсь, это поможет вам! Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать их. Удачи!

Добавить ответ