Вопрос или проблема
В WordPress 4.0, если я создаю новый пост и вставляю ссылку на YouTube напрямую в редактор постов, WordPress автоматически преобразует её в тег встраивания YouTube. Я пытаюсь изменить стандартный вывод для тега встраивания с помощью функции фильтра.
У меня есть следующий фрагмент кода:
add_action( 'wp_embed_handler_youtube', 'bigger_youtube_embeds', 10, 4);
function bigger_youtube_embeds($embed, $attr, $url, $rawattr) {
// измените строку $embed...
return $embed;
}
Я попробовал это после того, как ознакомился с следующей документацией: https://developer.wordpress.org/reference/hooks/wp_embed_handler_youtube/
Однако моя функция фильтра никогда не запускается, и я даже не уверен, когда она должна запускаться.
Немного поздно, но это может быть связано с тем, что это фильтр, а вы добавляете его как действие,
попробуйте
add_filter( 'wp_embed_handler_youtube', 'bigger_youtube_embeds', 10, 4);
function bigger_youtube_embeds($embed, $attr, $url, $rawattr) {
// измените строку $embed...
return $embed;
}
Ответ или решение
Конечно! Проблема, с которой вы столкнулись, связана с неправильным использованием хуков в WordPress. В вашем коде вы использовали функцию add_action
, когда на самом деле вам нужно использовать add_filter
, потому что вы пытались модифицировать выведенный HTML-код для встраивания видео с YouTube.
Вот правильный способ реализации вашей функции:
add_filter( 'wp_embed_handler_youtube', 'bigger_youtube_embeds', 10, 4 );
function bigger_youtube_embeds( $embed, $attr, $url, $rawattr ) {
// Здесь вы можете изменить строку $embed...
// Например, добавим атрибуты или изменим размеры видео
$embed = str_replace( 'width="560"', 'width="800"', $embed );
$embed = str_replace( 'height="315"', 'height="450"', $embed );
return $embed;
}
Объяснение изменений:
-
Использование
add_filter
: Подключая вашу функцию с помощьюadd_filter
, вы создаете фильтр, который позволяет изменять HTML, генерируемый для YouTube-встраиваний. -
Параметры функции: Ваш фильтр принимает четыре параметра:
$embed
,$attr
,$url
и$rawattr
.$embed
— это строка HTML, которую вы можете изменить в соответствии со своими требованиями. -
Модификация строки: В примере выше показано, как изменить ширину и высоту встроенного видео. Вы можете адаптировать этот код для других нужд.
Почему ваш первоначальный код не работал:
- Неправильный хук: Как было упомянуто, вы использовали
add_action
, что не предназначено для изменения контента.add_filter
идеально подходит для этой задачи.
Проверка работы:
После внесения изменений убедитесь, что ваша функция включена в файл functions.php
вашей темы или в плагин. Создайте новый пост с YouTube-ссылкой, и ваша функция должна корректно сработать, изменив выводимые параметры.
Если у вас возникнут дополнительные вопросы или возникнут другие проблемы, пожалуйста, дайте знать!