Вопрос или проблема
Я пытаюсь получить альтернативный текст для пользовательского логотипа, указанного в настройках темы. К сожалению, это не работает, потому что, похоже, альтернативный текст не включен в метаданные записи:
$custom_logo_id = get_theme_mod( 'custom_logo' );
get_post_meta($custom_logo_id, '_wp_attachment_image_alt', true);
Я бы использовал get_custom_logo
, который включает альтернативный текст, но я создаю свои собственные атрибуты srcset
и sizes
и мне нужен ТОЛЬКО альтернативный текст, чтобы добавить его.
Какие у меня есть другие варианты?
Я знаю, что этот вопрос довольно старый, но мне это понадобилось сегодня. В итоге я запустил фильтр get_custom_logo_image_attributes
, сохранив массив, предоставленный в нем, когда он выполняется, и получая к нему доступ позже.
В functions.php:
/* сбор атрибутов пользовательского логотипа */
add_filter( 'get_custom_logo_image_attributes', function($custom_logo_attr, $custom_logo_id, $blog_id ) {
global $logo_attrs;
$logo_attrs = $custom_logo_attr;
return $custom_logo_attr;
}, 10, 3);
function get_custom_logo_image_attributes() {
global $logo_attrs;
return $logo_attrs;
}
Когда приходит время получать данные, нужно сначала убедиться, что фильтр был вызван:
get_custom_logo(); // убедитесь, что фильтр логотипа вызван перед нашей функцией
$logo_attrs = get_custom_logo_image_attributes();
Как только у вас это есть, вы можете использовать $logo_attrs['alt']
где нужно.
Это не красиво, но это сработало.
Ответ или решение
Для получения alt текста пользовательского логотипа, указанного в настройках темы WordPress, вы правы в том, что get_post_meta($custom_logo_id, '_wp_attachment_image_alt', true);
не будет работать, так как метаданные поста для пользовательского логотипа не включают alt текст. Однако вы можете использовать другой подход.
В вашем случае было разумно использовать фильтр get_custom_logo_image_attributes
, чтобы получить атрибуты логотипа, включая alt текст. Вот как вы можете это сделать:
- Добавьте следующий код в файл
functions.php
вашей темы:
/* Сбор атрибутов логотипа */
add_filter('get_custom_logo_image_attributes', function($custom_logo_attr, $custom_logo_id, $blog_id) {
global $logo_attrs;
$logo_attrs = $custom_logo_attr;
return $custom_logo_attr;
}, 10, 3);
function get_custom_logo_image_attributes() {
global $logo_attrs;
return $logo_attrs;
}
Этот код создает фильтр, который захватывает и сохраняет атрибуты логотипа, когда вызывается get_custom_logo()
.
- Теперь, когда вам нужен alt текст логотипа, вы можете использовать следующий код:
get_custom_logo(); // Убедитесь, что фильтр логотипа был вызван
$logo_attrs = get_custom_logo_image_attributes(); // Получите атрибуты логотипа
$alt_text = $logo_attrs['alt']; // Извлеките alt текст
Таким образом, при вызове get_custom_logo()
, фильтр будет выполнен, и в глобальной переменной $logo_attrs
будут храниться все атрибуты, включая alt текст. Вы сможете получить alt текст, используя $logo_attrs['alt']
.
Этот подход, хотя и не идеален с точки зрения чистоты кода, вполне эффективен для вашей задачи и позволяет вам получить именно тот alt текст, который вам нужен, не прибегая к более сложным манипуляциям или дополнительным вызовам.