Вопрос или проблема
Вот php-код для формы, которая создает пост с миниатюрой. Я хочу узнать, как добавить загруженное изображение в содержимое поста. Попробовал несколько вариантов, но они не сработали.
if(isset($_POST['new_post']) == '1') {
$post_title = $_POST['post_title'];
$post_category = $_POST['cat'];
$filename = $_POST['attach'];
$new_post = array(
'ID' => '',
'post_author' => $current_user->ID,
'post_category' => array($post_category),
'post_title' => $post_title,
'post_status' => 'draft'
);
$post_id = wp_insert_post($new_post);
$post = get_post($post_id);
$new_post = $post->ID;
if (!function_exists('wp_generate_attachment_metadata')){
require_once(ABSPATH . "wp-admin" . '/includes/image.php');
require_once(ABSPATH . "wp-admin" . '/includes/file.php');
require_once(ABSPATH . "wp-admin" . '/includes/media.php');
}
if ($_FILES) {
foreach ($_FILES as $file => $array) {
if ($_FILES[$file]['error'] !== UPLOAD_ERR_OK) {
return "ошибка загрузки : " . $_FILES[$file]['error'];
}
$attach_id = media_handle_upload( $file, $new_post );
}
}
if ($attach_id > 0){
//и если вы хотите установить это изображение как миниатюру поста, тогда используйте:
update_post_meta($new_post,'_thumbnail_id',$attach_id);
}
}
Содержимое поста – это просто значение поля post_content
.
Вы можете получить HTML для вложения с помощью wp_get_attachment_image()
и либо передать его в wp_insert_post()
изначально (для этого нужно создать вложение заранее), либо использовать wp_update_post()
для назначения содержимого уже существующему посту.
Следующий код добавляет изображение в начале вашего поста. Вы можете отредактировать его, чтобы добавить изображение в нужное место.
$get_post = get_post($new_post);
$post_content = $get_post->post_content;
$post_id = $getPost->ID;
$new_attach = wp_get_attachment_image($attach_id);
$post_content = $new_attach.$post_content;
$post_data = array('ID'=>$post_id,'post_content'=>$post_content);
wp_update_post($post_data);
Ответ или решение
Вставка изображения в содержимое поста – Front End
Когда вы создаете пост на сайте WordPress и хотите не только загрузить миниатюру, но и добавить загруженное изображение непосредственно в содержимое поста, важно понимать основные шаги и использовать подходящие функции. Ниже приведено детальное руководство по выполнению этой задачи.
Шаги по вставке изображения в содержание поста
-
Обработка формы и загрузка изображения
Вы уже имеете код, который обрабатывает отправку формы и загружает изображение. Рассмотрим его более подробно:if (isset($_POST['new_post']) == '1') { $post_title = $_POST['post_title']; $post_category = $_POST['cat']; $new_post = array( 'post_author' => $current_user->ID, 'post_category' => array($post_category), 'post_title' => $post_title, 'post_status' => 'draft' ); $post_id = wp_insert_post($new_post); if ($_FILES) { foreach ($_FILES as $file => $array) { if ($_FILES[$file]['error'] !== UPLOAD_ERR_OK) { return "upload error : " . $_FILES[$file]['error']; } $attach_id = media_handle_upload($file, $post_id); } } if ($attach_id > 0) { update_post_meta($post_id, '_thumbnail_id', $attach_id); } }
-
Добавление загруженного изображения в содержание поста
После успешного завершения загрузки и сохранения миниатюры, необходимо вставить изображение в содержание поста. Для этого вы можете использовать функциюwp_get_attachment_image()
, которая формирует HTML для изображения.$post_content = ''; // Определите содержимое поста, если оно уже существует $new_attach = wp_get_attachment_image($attach_id, 'full'); // Получаем HTML для изображения $post_content .= $new_attach; // Добавляем изображение в начало содержимого поста (вы можете изменить позицию) // Обновление содержания поста $post_data = array( 'ID' => $post_id, 'post_content' => $post_content ); wp_update_post($post_data);
Полный пример кода
Объединим все шаги в единую структуру:
if (isset($_POST['new_post']) == '1') {
$post_title = $_POST['post_title'];
$post_category = $_POST['cat'];
$new_post = array(
'post_author' => $current_user->ID,
'post_category' => array($post_category),
'post_title' => $post_title,
'post_status' => 'draft'
);
$post_id = wp_insert_post($new_post);
if (isset($_FILES) && !empty($_FILES)) {
foreach ($_FILES as $file => $array) {
if ($_FILES[$file]['error'] !== UPLOAD_ERR_OK) {
return "Upload error: " . $_FILES[$file]['error'];
}
$attach_id = media_handle_upload($file, $post_id);
}
if ($attach_id > 0) {
update_post_meta($post_id, '_thumbnail_id', $attach_id);
// Вставка изображения в содержание поста
$new_attach = wp_get_attachment_image($attach_id, 'full');
$post_content = ''; // Получите существующее содержимое, если необходимо
$post_content .= $new_attach; // Вставляем изображение
// Обновление содержания поста
$post_data = array(
'ID' => $post_id,
'post_content' => $post_content
);
wp_update_post($post_data);
}
}
}
Заключение
Следуя этому руководству, вы сможете успешно загружать изображения в ваш пост и вставлять их в его содержимое. Правильное использование функций WordPress, таких как media_handle_upload()
и wp_get_attachment_image()
, обеспечит вам гибкость при работе с медиафайлами. Не забывайте также об обработке ошибок для повышения надежности вашего кода.