главная/WordPress: получаем картину по имени ACF полю или дефолтную
Получаем acf картинку или featured

WordPress: получаем картину по имени ACF полю или дефолтную

Просто полезная функция для работы с картинками. Работает с ACF полями по желанию можно заменить на get_post_meta вместо get_field.

Смысл работы очень простой, берем картинку по id поста и имени поля, если она отсутствует, получаем featred image страницы / поста.

  1. Первый аргумент принимает id поста
  2. Второй имя поля
  3. Массив с атрибутами: size (размер картинки), classes (css классы)

Пример использования

$image = get_image_by_field( 123, 'my_custom_image', [ 'size' => 'full', 'classes' => 'lazy-load' ] );

echo $image;

// Или обернем в функцию санитизации, что более правильно
echo wp_kses_post( $image );
/**
 * Get image by field name or default post thumbnail
 * @param $p_id
 * @param $field_name
 * @param $attr
 *
 * @return string|null
 */
function get_image_by_field( $p_id, $field_name, $attr = [] ) {
	$field_name = is_string( $field_name ) ? trim( $field_name ) : null;
	$p_id       = (int) $p_id;
	$attr       = is_array( $attr ) ? $attr : [];
	$classes    = isset( $attr['classes'] ) && is_string( $attr['classes'] ) ? $attr['classes'] : '';
	$size       = isset( $attr['size'] ) && is_string( $attr['size'] ) ? $attr['size'] : 'full';
	$attr       = [
		'class' => esc_attr( $classes ),
	];

	if ( ! $p_id ) {
		return null;
	}

	$image_id = $field_name ? get_field( $field_name, $p_id ) : null;
	$image_id = $image_id ? $image_id : get_post_thumbnail_id( $p_id );

	return $image_id ? wp_get_attachment_image( $image_id, $size, false, $attr ) : '';
}