WordPress: получаем картину по имени ACF полю или дефолтную
Просто полезная функция для работы с картинками. Работает с ACF полями по желанию можно заменить на get_post_meta вместо get_field.
Смысл работы очень простой, берем картинку по id поста и имени поля, если она отсутствует, получаем featred image страницы / поста.
- Первый аргумент принимает id поста
- Второй имя поля
- Массив с атрибутами: 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 ) : '';
}