Вопрос или проблема
Мой клиент хочет, чтобы я добавил пользовательские поля для миниатюры, поэтому логика будет следующей:
если custom_thumbnail пустой, отображать оригинал.
Но мне не нравится идея писать условные операторы повсюду + я использую SEO плагины для open graph и изображений, так что теперь мне нужно использовать фильтры для реализации пользовательской миниатюры.
Я думал о фильтрах wp, но не нашел фильтр для get_the_post_thumbnail.
apply_filter('get_the_post_thumbnail',function(){
//мои условные операторы
})
Вы можете использовать фильтр post_thumbnail_html
.
Этот фильтр применяется при возврате функции get_the_post_thumbnail
.
apply_filters( 'post_thumbnail_html', $html, $post->ID, $post_thumbnail_id, $size, $attr );
Ответ или решение
Для решения проблемы с отображением миниатюр в WordPress в зависимости от наличия пользовательского поля, необходимо использовать фильтр post_thumbnail_html
. Это оптимальное решение, так как оно позволяет избежать написания большого количества условных операторов, тем самым упрощая код и поддерживаемость вашего проекта.
Шаги по реализации:
-
Создание пользовательского поля для миниатюры:
Прежде всего, убедитесь, что вы создали пользовательское поле для обозначения нестандартных миниатюр. Если пользовательское поле с названиемcustom_thumbnail
пусто, будет отображаться стандартная миниатюра. -
Использование фильтра
post_thumbnail_html
:
Этот фильтр позволяет вам изменить HTML-код, возвращаемый функциейget_the_post_thumbnail()
. Давайте напишем функцию, которая применяет этот фильтр. -
Пример кода:
Вставьте следующий код в ваш файлfunctions.php
вашей темы:function custom_post_thumbnail_html($html, $post_id, $post_thumbnail_id, $size, $attr) { // Получаем значение пользовательского поля $custom_thumbnail = get_post_meta($post_id, 'custom_thumbnail', true); // Если пользовательское поле не пусто, используем его if (!empty($custom_thumbnail)) { // Вернем HTML-код пользовательской миниатюры return '<img src="' . esc_url($custom_thumbnail) . '" alt="' . esc_attr(get_the_title($post_id)) . '" />'; } // Если пользовательское поле пусто, вернем оригинальную миниатюру return $html; } add_filter('post_thumbnail_html', 'custom_post_thumbnail_html', 10, 5);
Объяснение кода:
- Получение пользовательского поля: С помощью функции
get_post_meta()
мы получаем значение поляcustom_thumbnail
для текущей записи. - Проверка заполненности поля: Если поле не пусто, мы генерируем HTML-код для изображения, используя URL из пользовательского поля. Также используется функция
esc_url()
для защиты от XSS-уязвимостей. - Возврат оригинальной миниатюры: Если пользовательское поле пусто, возвращается стандартный HTML-код миниатюры, полученный из переменной
$html
.
SEO-оптимизация:
В этом коде мы используем функции esc_url()
и esc_attr()
для экранирования URL-адреса и атрибутов, что помогает сохранить безопасность и целостность вашего сайта. Убедитесь, что у вас есть правильные атрибуты alt
для изображений — это не только улучшает SEO, но и делает ваш сайт более доступным.
Заключение:
Использование фильтра post_thumbnail_html
является эффективным и элегантным способом изменить поведение функции get_the_post_thumbnail()
, минимизируя количество условных операторов. Это не только повышает читаемость и поддерживаемость вашего кода, но и помогает более гибко управлять контентом на вашем сайте.