Intereting Posts
Преобразуйте дефисы подкатегорий по умолчанию в маркеры или любые другие символы добавить график к WP Corn для истечения срока действия Как я могу создать пользовательский поиск продукта? начисляет очки пользователю каждый раз, когда они обновляют свой пост cpt плагин для поиска по всем сообщениям, блогам, форумам, пользователям Правильное использование фигурных скобок против альтернативной синаксии Невозможно загрузить пользовательский файл CSS в дочернюю тему Получение пользовательского поля из формы контакта 7 Проверьте, установлена ​​ли таксономия категории CTP в коротком коде Выбор цвета, показывающий дважды, когда виджет добавлен к боковой панели Организация позиции виджетных областей в бэкэнд Как я могу присвоить протоколу относительные внешние (//ajax.googleapis.com/…) скрипты? Какое действие / фильтр / функция определяет «текущий» класс в меню WP Admin Отправьте запрос POST в WordPress, чтобы создать новую запись Безопасность и использование плагинов

Overwrite add_image_size, определяемый темой

Я купил WP-Theme, который определяет пользовательский размер изображения в его theme-functions.php следующим образом:

if ( function_exists( 'add_image_size' ) ){ add_image_size( 'tie-small', 70, 70, true ); } 

Как вы видите, третий параметр имеет значение true, что приводит к режиму жесткой обработки (см. Документацию WordPress для add_image_size ). Этот режим не заботится о пропорциях, поэтому некоторые мои миниатюры очень сильно изменяются. Я сделал несколько тестов и изменил параметр crop-Parameter на FALSE, создав лучшие результаты.

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

Мой плагин очень прост и выглядит следующим образом:

 class My_Plugin { public function __construct() { add_action( 'after_setup_theme', array( $this, 'overwrite_wptheme_settings' ) ); } public function overwrite_wptheme_settings() { add_image_size( 'tie-small', 70, 70, false ); } } 

Он не работает, я перезагрузил тестовое изображение, и похоже, что для обрезки установлено значение true. Я не могу понять, почему, потому что значение было перезаписано! Я мог бы проверить это, перейдя к функции tie_last_posts в теме-functions.php темы. Эта функция генерирует виджет с изображением после миниатюры:

 [...] function tie_last_posts($numberOfPosts = 5 , $thumb = true) { // [...] <?php global $_wp_additional_image_sizes; var_dump($_wp_additional_image_sizes); ?> <?php the_post_thumbnail( 'tie-small' ) ; ?> 

Это приведет к следующим виджету:

 array(3) { ["tie-small"]=> array(3) { ["width"]=> int(70) ["height"]=> int(70) ["crop"]=> bool(false) } ["tie-large"]=> array(3) { ["width"]=> int(300) ["height"]=> int(160) ["crop"]=> bool(true) } ["slider"]=> array(3) { ["width"]=> int(620) ["height"]=> int(330) ["crop"]=> bool(true) } } 

Как вы можете видеть, для атрибута crop установлено значение false в индексе tie-small . Поэтому он был перезаписан моим плагином. Но миниатюра обрезается. Я проверил это, используя testimage, который становится явно плохим, когда он обрезается WordPress. Я всегда перезагружал изображение в статье. И я проверил, что сама перезапись работает: я вставил add_image_size ('tie-small', 70, 70, false); в конце темы-functions.php, и это сработало, но в моем плагине это не так. Что здесь не так?

Измените действие на «init»:

 class My_Plugin { public function __construct() { add_action( 'init', array( $this, 'overwrite_wptheme_settings' ) ); } public function overwrite_wptheme_settings() { add_image_size( 'tie-small', 70, 70, false ); } } 

Решил это, создав дочернюю тему. В действии after_setup_theme я перезаписываю размер изображения, и он работает, миниатюры больше не обрезаются. Не уверен, почему это невозможно сделать в плагине, но для меня кажется, что создание детской игры вместо плагина – лучшее решение в любом случае. Сам WP-Doc говорит, что это рекомендуемый способ изменить тему, поэтому я перенесу свои изменения, сделанные моим плагином, на созданную мной дочернюю тему.