Получить прикрепленное изображение поста для отображения на панели администратора

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

Я долго искал решение, как сделать так, чтобы прикрепленное изображение в редакторе постов отображалось на панели, но столкнулся с проблемой. Я видел, как это сделать, и могу сделать это с эскизом:

function foo_attached_image( $post_ID ) {
    $post_thumbnail_id = get_post_thumbnail_id( $post_ID );
    if ( $post_thumbnail_id ) {
        $post_thumbnail_img = wp_get_attachment_image_src( $post_thumbnail_id );
        return $post_thumbnail_img[0];
    }
}

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

function attached_image_content( $column_name, $post_ID ) {
    if ( $column_name == 'foobar' ) {
        $post_attached_image = wp_get_attachment_url( $post_ID );
        if ( $post_attached_image ) {
            echo '<img style="width:100%;" src="' . $post_attached_image . '" />';
        }
    }
}
add_action( 'manage_cpt_posts_custom_column', 'attached_image_content', 10, 2 );

и я пробовал с wp_get_attachment_image_src() как $post_attached_image = wp_get_attachment_image_src( $post_ID, 'medium' );, но безуспешно. Если я использую get_intermediate_image_sizes(), я могу получить массив всего прикрепленного, но почему-то не могу заставить отображаться изображение, загруженное в редактор. Как правильным образом отобразить первое загруженное изображение, исключая эскиз, чтобы оно отображалось на панели?

Вам нужен ID вложения – это то же, что и “ID эскиза” – а не ID поста. Это сбивает с толку. Возможно, к WP 5.0 они обновят номенклатуру!

Итак, думаю, это сработает:

function attached_image_content( $column_name, $post_ID ) {
    if ( $column_name == 'foobar' ) {

        //Измените размер изображения с "эскиз" на другой здесь
        $post_attached_image = wp_get_attachment_image_src( get_post_thumbnail_id( $post_id ), 'medium' );
        if ( $post_attached_image ) {
            //как вы, вероятно, знаете, url это первое значение массива
            echo '<img style="width:100%;" src="' . $post_attached_image[0] . '" />';
        }
    }
}
add_action( 'manage_cpt_posts_custom_column', 'attached_image_content', 10, 2 );

Ответ или решение

Для решения задачи отображения прикрепленного изображения в административной панели WordPress, необходимо понимать, как работает взаимодействие с вложениями в системе. Рассмотрим шаги, которые помогут добиться необходимого результата при учете указанных требований и обеспечения оптимальной работы функции.

Определение проблемы

Судя по вашему описанию, вы правильно используете ID для снимка миниатюры (thumbnail) и используете его в функции. Однако, вы запутались с идентификаторами. В WordPress существует различие между ID поста и ID вложения.

Решение задачи

Чтобы отобразить первое загруженное изображение (исключая миниатюру) в пользовательском интерфейсе администратора, выполните правильное обращение к вложениям:

  1. Получите все вложения к посту: Основная идея заключается в том, чтобы выбрать первое изображение из списка вложений поста, за исключением миниатюры.

  2. Корректное использование идентификаторов: Не путайте идентификатор поста с идентификатором вложения.

Ниже приведен код, который может помочь в вашей ситуации:

function attached_image_content( $column_name, $post_ID ) {
    if ( $column_name == 'foobar' ) {
        // Получение всех вложений к текущему посту
        $args = array(
            'post_parent' => $post_ID,
            'post_type'   => 'attachment',
            'post_mime_type' => 'image',
            'numberposts' => 1,  // нам нужно только первое вложение
            'orderby'     => 'menu_order',
            'order'       => 'ASC'
        );

        $attachments = get_children( $args );

        if ( $attachments ) {
            foreach ( $attachments as $attachment ) {
                // Исключаем изображение-миниатюру
                if ( get_post_thumbnail_id( $post_ID ) != $attachment->ID ) {
                    // Получаем URL изображения среднего размера
                    $image_src = wp_get_attachment_image_src( $attachment->ID, 'medium' );
                    if ( $image_src ) {
                        echo '<img style="width:100%;" src="' . $image_src[0] . '" />';
                        break; // Остановка после первого найденного изображения
                    }
                }
            }
        }
    }
}
add_action( 'manage_cpt_posts_custom_column', 'attached_image_content', 10, 2 );

Пояснения:

  • get_children(): Используется для получения всех вложений конкретного поста.
  • Условие проверки ID миниатюры: Этот шаг гарантирует, что изображение будет отличаться от миниатюры.
  • Отображение: Использование wp_get_attachment_image_src() для получения среднего размера изображения.

SEO и профессиональное написание

  • Уникальное содержание: Избегайте стандартных фраз, используйте специфические термины для системы WordPress.
  • Ключевые слова: Включите в текст такие термины, как "вложение WordPress", "администрирование WordPress", "функция вывода изображений", чтобы улучшить его видимость.
  • Читабельность: Пишите понятным и простым языком, обеспечивая легкость восприятия информации.

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

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

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