Intereting Posts
Удалить дублирующее главное – подменю в admin? Какие области для тестирования модуля при построении плагина? Как определить, есть ли следующая страница MySQL Rank & $ wpdb Какой порядок? register_taxonomy () register_taxonomy_for_object_type () register_post_type () Архив слайдера для CPT Woocommerce меняет цену продукта после того, как Woocommerce удалила его из базы данных Схватил идентификатор сообщения под контуром WP, но все еще не мог напечатать заголовок сообщения Показать все теги сообщений на пост edit screen / sidebox Допустимый размер памяти Элегантный способ включения только опубликованных сообщений с get_objects_in_term ()? Параметры плагина, пресеты и фильтры: можете ли вы помочь мне улучшить мой рабочий процесс? В архиве тегов – количество просмотров сообщений для каждой категории, к которой они принадлежат. вы можете установить значение по умолчанию для настраиваемого поля Подробнее не работает с сообщениями запроса

Невозможно правильно показать пользовательское поле изображения ACF в Genesis Framework

WP 4.7.3 с типами, образцом примера Genesis, ACF и несколькими очень известными плагинами, ничего особенного или нестандартного.

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

$count = get_post_meta( get_the_ID(), 'items', true ); if ( $count ) { for ( $i = 0; $i < $count; $i++ ) { $item_100x100 = get_post_meta( get_the_ID(), 'items_' . $i . '_item_100x100', true ); $item_200x200 = get_post_meta( get_the_ID(), 'items_' . $i . '_item_200x200', true ); $item_300x300 = get_post_meta( get_the_ID(), 'items_' . $i . '_item_300x300', true ); if ( $item_100x100 ) { echo '<p class="overview">' . wp_get_attachment_image( $item_100x100, 'items' ) . '</p>'; } elseif ( $item_200x200 ) { echo '<p class="overview">' . wp_get_attachment_image( $item_200x200, 'items' ) . '</p>'; } elseif ( $item_300x300 ) { echo '<p class="overview">' . wp_get_attachment_image( $item_300x300, 'items' ) . '</p>'; } } } 

Я думаю, это правильно, и все работает отлично.

Затем я работаю над файлом archive-cpt.php, который должен показывать несколько настраиваемых полей для каждого найденного сообщения, включая это изображение.

Теперь, если бы мне пришлось показать Featured Image, я мог бы сделать:

 // Featured image if ( $image = genesis_get_image( 'format=url&size=item-image' ) ) { printf( '<a href="%s" rel="bookmark"><img src="%s" alt="%s" class="alignleft" /></a>', get_permalink(), $image, the_title_attribute( 'echo=0' ) ); } // Entry title echo '<h2 class="entry-title" itemprop="headline"><a href="' . get_permalink() . '">'. get_the_title() .'</a></h2>'; 

Но я не показываю Featured Image Post, я пытаюсь показать настраиваемое поле типа изображения из поля повторителя ACF.

Если я сделаю:

 if ( $item_100x100 ) { $image = wp_get_attachment_image( $item_100x100, 'items' ); } elseif ( $item_200x200 ) { $image = wp_get_attachment_image( $item_200x200, 'items' ); } elseif ( $slope_map_300x300 ) { $image = wp_get_attachment_image( $item_300x300, 'items' ); } printf( '<a href="%s" rel="bookmark"><img src="%s" alt="%s" class="alignleft" /></a>', get_permalink(), $image, the_title_attribute( 'echo=0' ) ); 

Я получаю изображение, напечатанное на экране, но сопровождаемое строкой

"alt =" my-alt-text "class =" alignleft "/>

рядом с ним.

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

Может ли кто-нибудь помочь? Заранее спасибо.

ПРИМЕЧАНИЕ. Я не использую ACF-команды get_field () и т. Д., Потому что: а) они не являются основным для WP и b) они добавляют запросы к базе данных (много, десятки, если у вас несколько повторителей или гибкое содержимое). С собственным WP вы добавляете только один запрос базы данных для всего.

Итак, вот правильный ответ, с полным кодом для поля повторителя ACF:

 $count = get_post_meta( get_the_ID(), 'items', true ); if ( $count ) { for ( $i = 0; $i < $count; $i++ ) { $item_100x100 = intval( get_post_meta( get_the_ID(), 'items_' . $i . '_item_100x100', true ) ); $item_200x200 = intval( get_post_meta( get_the_ID(), 'items_' . $i . '_item_200x200', true ) ); $item_300x300 = intval( get_post_meta( get_the_ID(), 'items_' . $i . '_item_300x300', true ) ); if ( $item_100x100 ) { $image_id = wp_get_attachment_image_src( $item_100x100, 'full' ); } elseif ( $item_200x200 ) { $image = wp_get_attachment_image_src( $item_200x200, 'full' ); } elseif ( $item_300x300 ) { $image = wp_get_attachment_image_src( $item_300x300, 'full' ); } if ( $image ) { echo '<a href="' . get_permalink() . '" rel="bookmark"><img src="' . $image[0] . '" alt="' . the_title_attribute( 'echo=0' ) . '">'; } } } 

Или, вместо этого

эхо

часть, вы можете сделать:

 printf( '<a href="%s" rel="bookmark"><img src="%s" alt="%s" class="alignleft" /></a>', get_permalink(), $image[0], the_title_attribute( 'echo=0' ) ); 

Вам просто нужно изменить «полный» на желаемый размер изображения.

ОБНОВЛЕНИЕ: Как указано ниже @bosco, wp_get_attachment_image вернет весь HTML-элемент. Мы просто хотим, чтобы URL-адрес изображения мог установить атрибут src . Поэтому мы будем использовать wp_get_attachment_image_src в нашем коде. Я понимаю, что я возился с HTML.