Вопрос или проблема
Я хочу создать менеджер логотипов в Кастомайзере, но как мне задать разные размеры изображений с помощью класса WP_Customize_Cropped_Image_Control
?
Пример с Make WordPress Core:
$wp_customize->add_control( new WP_Customize_Cropped_Image_Control( $wp_customize, 'cropped_image', array(
'section' => 'background_image',
'label' => __( 'Изображение для обрезки' ),
'flex_width' => true, // Позволяет любую ширину, что делает указанное значение рекомендуемым. По умолчанию false.
'flex_height' => false, // Требует, чтобы полученное изображение было точно такой же высоты, как указано в атрибуте высоты (по умолчанию).
'width' => 1920,
'height' => 1080,
) ) );
Я думаю, что вы добавляете поле настроек для каждого логотипа? Если нет, пожалуйста, уточните ваш вопрос.
Если да, то также добавьте часто вызов для управления обрезанными изображениями. Следующий пример добавляет секцию, поле для опции логотипа и возможность обрезки изображения.
add_action( 'customize_register', 'fb_logo_customize_register' );
function fb_logo_customize_register( $wp_customize ) {
/* Добавляем секцию логотипа. */
$wp_customize->add_section(
'logo',
array(
'title' => esc_html__( 'Логотип', 'textdomain' ),
'description' => __( 'Управление списком пользователей', 'textdomain' ),
'priority' => 10,
//'panel' => 'fb_panel' // не входит в пример кода,
)
);
/* Добавляем настройку для нашего значения логотипа. */
$wp_customize->add_setting(
'site_logo',
array(
'default' => '',
'sanitize_callback' => 'absint'
)
);
/* Добавляем наш загрузчик изображений. */
$wp_customize->add_control(
new WP_Customize_Cropped_Image_Control(
$wp_customize,
'site_logo',
array(
'label' => __( 'Логотип сайта', 'textdomain' ),
'section' => 'logo',
'flex_width' => true,
'flex_height' => true,
'width' => 240,
'height' => 80,
)
)
);
}
Вот как мы это сделали – наша цель заключалась в создании круглого изображения профиля, поэтому мы заставляли изображение обрезаться квадратным образом при загрузке – вам нужно сделать что-то подобное для загрузки логотипа.
Размер, который вы определяете, будет определять размеры отображаемого конечного результата, поэтому в моем примере, если пользователь решит обрезать прямоугольник, результат все равно будет отображаться как квадрат, искажающий изображение. Чтобы избежать этого, вам следует иметь в виду, какой тип логотипа подойдет лучше всего для области, которую вы рассматриваете в теме, будь то логотип в виде значка, прямоугольный логотип, аморфный логотип и т. д., и оставить параметры flex на ‘false’ – последнее, чего хочет любой пользователь, это чтобы его логотип отображался неправильно.
В любом случае, надеюсь, вы находите это полезным!
$wp_customize->add_setting( 'theme_profile_picture', array(
'transport' => 'refresh',
'sanitize_callback' => 'theme_sanitize_profile_picture',
));
$wp_customize->add_section('theme_profile_picture_section', array(
'title' => __('Изображение профиля', 'theme'),
'priority' => 10,
));
$wp_customize->add_control( new WP_Customize_Cropped_Image_Control( $wp_customize, 'theme_profile_picture', array(
'label' => __( 'Загрузить изображение профиля', 'theme' ),
'section' => 'title_tagline',
'settings' => 'theme_profile_picture',
'flex_width' => false, // Позволяет любую ширину, делая указанное значение рекомендуемым. По умолчанию false.
'flex_height' => false,
'width' => 250,
'height' => 250,
) ) );
Ответ или решение
Конечно! Давайте рассмотрим, как правильно использовать класс WP_Customize_Cropped_Image_Control
для создания менеджера логотипов в WordPress Customizer и как задать разные размеры изображений для этих логотипов.
Создание управления логотипом в WordPress Customizer
Чтобы создать управление для логотипов в WordPress Customizer, вам потребуется зарегистрировать секцию, настройки и сам контрол управления для загрузки и обрезки изображения. Вот пример кода, который демонстрирует, как это сделать.
add_action( 'customize_register', 'fb_logo_customize_register' );
function fb_logo_customize_register( $wp_customize ) {
// Добавляем секцию для логотипа
$wp_customize->add_section(
'logo',
array(
'title' => esc_html__( 'Логотип', 'textdomain' ),
'description' => __( 'Управление логотипом сайта', 'textdomain' ),
'priority' => 10,
)
);
// Добавляем настройку для логотипа
$wp_customize->add_setting(
'site_logo',
array(
'default' => '',
'sanitize_callback' => 'absint', // Убедитесь, что сохраняется только ID изображения
)
);
// Добавляем контрол для загрузки и обрезки изображения логотипа
$wp_customize->add_control(
new WP_Customize_Cropped_Image_Control(
$wp_customize,
'site_logo',
array(
'label' => __( 'Загрузить логотип', 'textdomain' ),
'section' => 'logo',
'flex_width' => false, // Выбираем фиксированную ширину
'flex_height' => false, // Выбираем фиксированную высоту
'width' => 240, // Ширина логотипа
'height' => 80, // Высота логотипа
)
)
);
}
Объяснение параметров
- Секция логотипа: Мы создаем новую секцию в Customizer, где будет размещено управление логотипом.
- Настройка логотипа: Используем
add_setting
, чтобы добавить настройку для логотипа. При этом используем функциюabsint
в качестве функции для очистки, чтобы сохранить только ID изображения. - Контрол для обрезки изображения: Мы создаем новый контрол, используя
WP_Customize_Cropped_Image_Control
. Здесь важно указать параметры:flex_width
иflex_height
: Если вы хотите, чтобы изображение имело фиксированные размеры, установите оба параметра вfalse
. Это предотвратит нежелательную деформацию изображения.width
иheight
: Это размеры, на которые будет обрезано изображение логотипа.
Рекомендации
- Фиксированные размеры: Если ваша тема требует логотипа строго заданных размеров, не используйте гибкие параметры. Это поможет избежать искажений и неправильного отображения логотипа.
- Тестирование: Не забудьте протестировать, как ваш логотип будет выглядеть на различных устройствах и экранах, чтобы убедиться, что он хорошо адаптируется.
Заключение
Следуя приведенному выше примеру и рекомендациям, вы сможете успешно реализовать управление логотипом через Customizer с возможностью задавать фиксированные размеры изображений. Это обеспечит лучшее качество и визуальную согласованность вашего сайта. Если у вас возникли дополнительные вопросы, не стесняйтесь обращаться за помощью!