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