Вопрос или проблема
В настоящее время я добавил пользовательское мета-поле для загрузки медиафайла (изображения). Я успешно добавил кнопку загрузки для отображения, и она работает, но у меня возникают проблемы с сохранением поля при обновлении страницы.
Код, который я использую для создания и отображения поля:
<?php
$image = get_template_directory_uri().'/images/image.png';
echo '<span class="custom_default_image" style="display:none">'.$image.'</span>';
if ($meta)
{
$image = wp_get_attachment_image_src($meta, 'medium'); $image = $image[0];
}
echo '<input name="image-upload-one" type="hidden" class="custom_upload_image value="'.$meta.'" />
<img src="'.$image.'" class="custom_preview_image" alt="" />
<br />
<input class="custom_upload_image_button button" type="button" value="Выберите изображение" />
<br/>
<small>
<a href="#" class="custom_clear_image_button">Убрать изображение</a>
</small>
<br clear="all" />
<span class="description">'.$field['desc'].'</span>'; ?>
Приведенный выше код взят из:
http://code.tutsplus.com/tutorials/reusable-custom-meta-boxes-part-3-extra-fields–wp-23821
Я не могу найти способ сохранить ввод.
Я создавал простые текстовые поля/текстовые области и мог сохранить их без проблем, используя функцию ниже, но у меня возникают проблемы с сохранением полей изображения:
<?php if (isset($_POST['text-two']))
{
update_post_meta($post_id,'textTwo', esc_attr($_POST['text-two']));
} ?>
Любая помощь будет весьма признательна.
Для публикации изображений вы должны использовать функцию wordpress media_handle_upload
<?php if (isset($_FILES['text-two']))
require_once(ABSPATH . "wp-admin" . '/includes/image.php');
require_once(ABSPATH . "wp-admin" . '/includes/file.php');
require_once(ABSPATH . "wp-admin" . '/includes/media.php');
$attach_id = media_handle_upload( $_FILES['text-two'], $post_id );
update_post_meta($post_id,'textTwo', $attach_id));
?>
Также проверьте эту функцию wp_handle_upload
http://codex.wordpress.org/Function_Reference/wp_handle_upload для обработки загрузок в wordpress
Ответ или решение
Сохранение пользовательских метаполей изображений в WordPress может быть несколько сложной задачей, особенно для новичков. Вам необходимо убедиться, что вы правильно обрабатываете и сохраняете изображения, используя соответствующие функции WordPress. В этом ответе мы рассмотрим, как управлять метаполями и сохранять загруженные изображения.
Шаги по сохранению пользовательских метаполей с изображениями
-
Создание метаполя для загрузки изображения: Вы уже успешно создали поле для загрузки изображения. Вам нужно убедиться, что это поле корректно отображается на странице редактирования поста и что значение сохраняется должным образом.
-
Использование JavaScript для загрузки изображения: Убедитесь, что у вас правильно настроен JavaScript-код для вызова медиа-менеджера WordPress, который позволит вам выбирать изображение и передавать его в поле ввода. Убедитесь, что этот код выполняется, когда вы нажимаете на кнопку "Выбрать изображение".
-
Обработка и сохранение загруженного изображения: Вам необходимо обработать загруженное изображение и сохранить его ID в метаполе. Для этого вы можете использовать следующие функции WordPress:
if (isset($_POST['image-upload-one'])) {
// Удалите предыдущий метаполе, если необходимо
delete_post_meta($post_id, 'image-upload-one');
// Получение ID вложения
$attach_id = intval($_POST['image-upload-one']);
// Сохранение ID вложения в метаполе
update_post_meta($post_id, 'image-upload-one', $attach_id);
}
- Загрузка изображения через AJAX: Если вы используете AJAX для загрузки изображений, убедитесь, что вы правильно настроили обработчик AJAX для сохранения данных. Пример:
add_action('wp_ajax_upload_image', 'handle_upload_image');
function handle_upload_image() {
// Проверьте nonce для безопасности
check_ajax_referer('upload_image_nonce', 'security');
// Проверьте, было ли загружено изображение
if (!empty($_FILES['image'])) {
// Загрузка изображения
require_once(ABSPATH . 'wp-admin/includes/image.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/media.php');
$attachment_id = media_handle_upload('image', 0);
// Проверьте, нет ли ошибок
if (is_wp_error($attachment_id)) {
echo 'Ошибка загрузки.';
} else {
echo $attachment_id; // Возвращает ID, сохраните его
}
}
die();
}
- Обработка при отправке формы: Когда форма отправлена, вам нужно обрабатывать данные из поля изображения на серверной стороне, как указано выше. Убедитесь, что ваше поле на форме называется
image-upload-one
, и используйте его значение.
Примечания по безопасности
- Позаботьтесь о проверке прав доступа для пользователей, которые отправляют данные на сервер, чтобы предотвратить несанкционированные загрузки.
- Обязательно используйте проверку nonce для защиты от CSRF-атак.
Заключение
Следуя вышеизложенным шагам, вы сможете успешно сохранить пользовательские метаполя для изображений при обновлении страницы. Убедитесь, что вы тщательно отлаживаете каждый шаг, чтобы исключить любые потенциальные проблемы с загрузкой и сохранением изображений.