Как автоматически обернуть элемент вокруг iframe или embed в контенте?

15 авг. 2012 г., 05:17:53
Просмотры: 18.1K
Голосов: 8

Я хочу, чтобы WordPress автоматически оборачивал div вокруг любого iframe или embed, когда они используются в the_content... как этого можно достичь?

0
Все ответы на вопрос 3
3
21

Вот решение, которое я использовал:

function wrap_embed_with_div($html, $url, $attr) {

     return '<div class="video-container">' . $html . '</div>';

}

 add_filter('embed_oembed_html', 'wrap_embed_with_div', 10, 3);
7 нояб. 2012 г. 00:14:53
Комментарии

Если я не ошибаюсь, чтобы фильтр работал, последняя строка должна быть: add_filter( 'embed_oembed_html', 'wrap_embed_with_div', 10, 4 );

its_me its_me
3 дек. 2013 г. 22:07:17

Последний параметр в add_filter — это accepted_args, целое число, обозначающее количество аргументов, принимаемых функцией, в данном случае это 3.

user23385 user23385
10 февр. 2014 г. 19:28:23

это верно, @user23385, 4-й аргумент был бы $post_id. тогда как в вашем ответе вы используете только аргумент 1. так что можно безопасно пропустить 10 (значение по умолчанию) и 3, так как вам нужен только 1, и это также было бы значением по умолчанию.. (но тогда вам также нужно удалить $url и $attr из вашей функции) спасибо за ответ, именно то, что мне нужно было :)

honk31 honk31
16 нояб. 2018 г. 13:19:32
5

С помощью фильтров WordPress. Добавьте это в ваш functions.php:

function div_wrapper($content) {
    // находим все iframe и embed
    $pattern = '~<iframe.*</iframe>|<embed.*</embed>~';
    preg_match_all($pattern, $content, $matches);

    foreach ($matches[0] as $match) {
        // оборачиваем найденный iframe в div
        $wrappedframe = '<div>' . $match . '</div>';

        // заменяем оригинальный iframe на обернутый в контенте
        $content = str_replace($match, $wrappedframe, $content);
    }

    return $content;    
}
add_filter('the_content', 'div_wrapper');
15 авг. 2012 г. 09:31:37
Комментарии

Извините за поздний ответ, я был в командировке... это выглядит очень перспективно, я попробую и отпишусь о результатах.

Mr.Brown Mr.Brown
18 авг. 2012 г. 04:27:22

Это отлично работает, но есть ли способ ограничить обертку, чтобы она выводилась только один раз после обнаружения первого iframe или встроенного объекта?...

Mr.Brown Mr.Brown
18 авг. 2012 г. 05:21:02

Вы можете использовать preg_match вместо preg_match_all, чтобы получить только один результат. Или переписать foreach с break после первой итерации. Или вообще не использовать foreach, а просто взять первое совпадение ($match = $matches[0]). Главное - сначала проверьте, есть ли вообще совпадения.

pbd pbd
18 авг. 2012 г. 13:52:03

Это просто охренительно! Я использовал это, чтобы сделать видео адаптивными с помощью вспомогательного класса Bootstrap: $wrappedframe = '<div class="embed-responsive embed-responsive-16by9">' . $match . '</div>';

Radmation Radmation
8 июн. 2017 г. 23:44:54

У меня сотни iframe на сайте, я добавил этот кусок кода в файл functions.php, но ничего не произошло. Я пробовал использовать jQuery и несколько других методов, но что бы я ни делал, я не могу обернуть div вокруг своих iframe.

Nick Nick
8 июл. 2019 г. 21:08:37
2

Попробуйте jQuery

$('iframe').wrap('<div class="wrapper" />');
15 авг. 2012 г. 07:09:26
Комментарии

В итоге это оказалось более простым и полезным решением, когда стало понятно, что PHP-функция захватывала слишком широкий спектр iframe по всему сайту.

Mr.Brown Mr.Brown
6 сент. 2012 г. 19:04:46

Конечно, это не будет работать, если в браузере отключен JavaScript.

Craig Tullis Craig Tullis
14 окт. 2015 г. 09:15:30