Вставка изображения в содержимое сообщения – Фронтенд

Вопрос или проблема

Вот 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 и хотите не только загрузить миниатюру, но и добавить загруженное изображение непосредственно в содержимое поста, важно понимать основные шаги и использовать подходящие функции. Ниже приведено детальное руководство по выполнению этой задачи.

Шаги по вставке изображения в содержание поста

  1. Обработка формы и загрузка изображения
    Вы уже имеете код, который обрабатывает отправку формы и загружает изображение. Рассмотрим его более подробно:

    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);
       }
    }
  2. Добавление загруженного изображения в содержание поста
    После успешного завершения загрузки и сохранения миниатюры, необходимо вставить изображение в содержание поста. Для этого вы можете использовать функцию 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(), обеспечит вам гибкость при работе с медиафайлами. Не забывайте также об обработке ошибок для повышения надежности вашего кода.

Оцените материал
Добавить комментарий

Капча загружается...