Intereting Posts
применять фильтры только к конкретному сообщению без проверки параметров URL Как заменить постоянные ссылки Как я могу перенаправить URL-адрес после успешной регистрации? удалить пользовательский тип сообщения, используя форму отправки Рекомендации по использованию нескольких пользовательских каналов Пользовательский контент до публикации Ссылка переписать на https (НЕ переписывать URL) apply_filters с несколькими аргументами и несколькими add_filter Проверка шаблонов страниц в дочерней теме событие «save_post» запускается, когда я хочу начать новую запись Добавить разрывы строк в описании категории через enter Как правильно переписать URL-адрес пользовательским var dbDelta не устанавливает базу данных Как добавить новый мета-ключ и назначить отметку времени для сообщений Нажатие кнопки боковой панели при переадресации пользователя вместо этого отображает ее

Добавить параметры видео vimeo, используя вставки WordPress

Я использую настраиваемое поле для встраивания любого поддерживаемого видео в WordPress, поэтому, например, пользователь вводит видео-адрес в поле пользовательского поля:

http://vimeo.com/72104173 

и я применил следующий код на моей теме:

 <?php $videourl = my_meta('video'); // get custom field value if($videourl!=''){ // if custom field exist ?> <?php $htmlcode = wp_oembed_get("{$videourl}"); //use oembed echo "<div class='video'>{$htmlcode}</div>"; //output the video ?> ... 

результат / результат ниже:

 <iframe ... src="http://player.vimeo.com/video/72104173"></iframe> 

проблема в том, что я хочу добавить дополнительные параметры в vimeo, чтобы я мог скрыть Title и Byline видео, добавив в src следующее:

 ?title=0&amp;byline=0&amp;portrait=0 

поэтому конечным результатом будет:

 <iframe ... src="http://player.vimeo.com/video/72104173?title=0&amp;byline=0&amp;portrait=0"></iframe> 

Я попробовал пользователь str_replace но проблема в том, что параметры добавляются в конец каждого видео src, и оценка будет отличаться каждый раз,

очень ценю любую помощь, спасибо

Вы можете добавить аргументы запроса в конец URL-адреса, например:

 $videourl = add_query_arg( array('key1' => 'value1' ), $videourl ); // you can add as many as you want in key/value pairs... $htmlcode = wp_oembed_get( $videourl ); // rest of your code... 

То, что я предполагаю (не пытаюсь), не работает с другим решением, возможно, что добавление к URL-адресу, прежде чем запрашивать Vimeo для кода встраивания, можно просто игнорировать Vimeo.

Поэтому я просто разбираю ответ с помощью RegEx:

 $htmlcode = preg_replace("/(http:\/\/player.vimeo.com\/video\/[0-9]*)/i", '$1?title=0&portrait=0&byline=0&color=ffffff', $htmlcode); 

В WordPress имеется несколько фильтров для изменения данных oEmbed, в зависимости от того, когда вам нужно изменить результаты:

  1. embed_handler_html
    Фильтрует возвращенный обработчик вставки.
  2. embed_oembed_html
    Фильтрует кэшированный HTML-код OEmbed.
  3. oembed_result
    Фильтрует HTML, возвращаемый поставщиком oEmbed.

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

Например, embed_handler_html вызывается до того, как данные будут помещены в кеш oEmbed / wp_postmeta (поэтому только один раз для внешнего встраивания), в то время как embed_oembed_html вызывается после извлечения кэша oEmbed (поэтому каждый раз, когда элемент отображается).

Если вам нужно только один раз изменить данные oembed_result , oembed_result , вероятно, ваш лучший кандидат.

Чтобы ответить на ваш вопрос, приведен пример, который изменяет параметры встраивания Vimeo и YouTube, возвращаемые из функции WordPress wp_oembed_get() .

Разметка HTML <iframe> сначала анализируется классом DOMDocument PHP, тогда URL-адрес встраивания изменяется с помощью функции add_query_arg () WordPress:

 /** * */ add_filter( 'oembed_result', function ( $html, $url, $args ) { $doc = new DOMDocument(); $doc->loadHTML( $html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD ); $tags = $doc->getElementsByTagName( 'iframe' ); foreach ( $tags as $tag ) { $iframe_src = $tag->attributes->getNamedItem('src')->value; if ( false !== strpos( $iframe_src, 'youtube.com' ) ) { // https://developers.google.com/youtube/player_parameters $url = add_query_arg( array( 'autohide' => 1, 'autoplay' => 1, 'controls' => 2, 'feature' => null, 'modestbranding' => 1, 'playsinline' => 1, 'rel' => 0, 'showinfo' => 0, ), $iframe_src ); } if ( false !== strpos( $iframe_src, 'vimeo.com' ) ) { // https://developer.vimeo.com/player/embedding $url = add_query_arg( array( 'autoplay' => 1, 'badge' => 0, 'byline' => 0, 'portrait' => 0, 'title' => 0, ), $iframe_src ); } $tag->setAttribute( 'src', $url ); $html = $doc->saveHTML(); } return $html; }, 10, 3 );