Как получить список всех возможных размеров миниатюр, заданных в теме

24

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

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

м-Torin
источник
Искал что-то вроде этого, но с интерфейсом, наткнулся на плагин Дополнительные размеры изображений (zui) . Он имеет 500 дней без обновлений, но прошел первую партию тестов.
Brasofilo

Ответы:

41

Нашел это здесь . Ответ:

global $_wp_additional_image_sizes; 
print '<pre>'; 
print_r( $_wp_additional_image_sizes ); 
print '</pre>';
м-Torin
источник
Добавление его в начало functions.phpфайла не будет работать, но вставьте его в любую из ваших функций в этом файле, и оно должно работать.
kevnk
14

Если вам нужны только имена всех размеров изображения, вы можете использовать get_intermediate_image_sizes :

<pre>
<?php print_r(get_intermediate_image_sizes()); ?>
</pre>
sqren
источник
13

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

/**
 * Get all the registered image sizes along with their dimensions
 *
 * @global array $_wp_additional_image_sizes
 *
 * @link http://core.trac.wordpress.org/ticket/18947 Reference ticket
 *
 * @return array $image_sizes The image sizes
 */
function _get_all_image_sizes() {
    global $_wp_additional_image_sizes;

    $default_image_sizes = get_intermediate_image_sizes();

    foreach ( $default_image_sizes as $size ) {
        $image_sizes[ $size ][ 'width' ] = intval( get_option( "{$size}_size_w" ) );
        $image_sizes[ $size ][ 'height' ] = intval( get_option( "{$size}_size_h" ) );
        $image_sizes[ $size ][ 'crop' ] = get_option( "{$size}_crop" ) ? get_option( "{$size}_crop" ) : false;
    }

    if ( isset( $_wp_additional_image_sizes ) && count( $_wp_additional_image_sizes ) ) {
        $image_sizes = array_merge( $image_sizes, $_wp_additional_image_sizes );
    }

    return $image_sizes;
}

Который будет выводить результаты, похожие на:

Array
(
    [thumbnail] => Array
        (
            [width] => 150
            [height] => 150
            [crop] => 1
        )

    [medium] => Array
        (
            [width] => 300
            [height] => 300
            [crop] => 
        )

    [medium_large] => Array
        (
            [width] => 768
            [height] => 0
            [crop] => 
        )

    [large] => Array
        (
            [width] => 1024
            [height] => 1024
            [crop] => 
        )

)
rjb
источник
3
+1 для более полного ответа. Другие возвращают дополнительные размеры, но не по умолчанию.
Казума Нии Кавальканти
2
Еще лучше, если вы используете, $default_image_sizes = get_intermediate_image_sizes();поскольку есть medium_largeразмер, начиная с WP 4.4.
natebeaty
Хорошее предложение; Я обновил ответ с вашей рекомендацией.
RJB
ACF избаловал меня своим медиа-массивом.
Адам Паттерсон
3

Если другой ответ не сработал, используйте этот код, чтобы он работал после инициализации WordPress.

add_action('init', 'get_all_image_sizes');

function get_all_image_sizes(){
    global $_wp_additional_image_sizes; 
    print '<pre>'; 
    print_r( $_wp_additional_image_sizes ); 
    print '</pre>';
}
Шоаиб Икбал
источник
Я проверил несколько методов, и этот, наконец, сработал. (WP + WooCommerce + пользовательская тема)
Juraj.Lorinc