Публикация только URL-адреса Facebook без полного фрагмента кода

Цель: конвертировать собственный URL-адрес Facebook (без полного фрагмента кода) в сообщение Facebook на веб-сайте front-end

Проблема: экспериментальная тема o2 / p2 / дышать по умолчанию преобразует полный фрагмент кода Facebook в редакторе на полный пост Facebook в интерфейсе. Пример фрагмента:

<div class="fb-post" data-href="https://www.facebook.com/WordPresscom/posts/10154113693553980" max-width="90%"> 

Я хотел бы просто просто разместить ТОЛЬКО URL-адрес в редакторе и связать URL-адрес с <div class="fb-post" data-href=" ... " max-width="90%"> в исходный код.

Я предполагаю, что мне нужно сделать это через functions.php?

Solutions Collecting From Web of "Публикация только URL-адреса Facebook без полного фрагмента кода"

Обратите внимание, что Facebook является зарегистрированным поставщиком oEmbed в ядре WordPress.

Вы могли бы, например, использовать фильтр pre_oembed_result , прежде чем HTTP-запрос будет сделан, отменить его и переопределить в соответствии с вашими потребностями.

Вот пример сообщений в Facebook:

 add_filter( 'pre_oembed_result', function ( $result, $url, $args ) { // override the HTML result for Facebook posts, that will be saved into postmeta table if( preg_match( '#https?://www\.facebook\.com/.*/posts/.*#i', $url ) ) $result = sprintf( '<div class="fb-post" data-href="%s">%s</div>', esc_url( $url ), esc_url( $url ) ); return $result; }, 10, 3 ); 

Когда вы вставляете URL-адрес post Facebook, в редактор содержимого сообщения, он также отображает измененный результат oEmbed с нашим фрагментом.

Результаты oEmbed кэшируются по умолчанию в таблице DAY_IN_SECONDS , для DAY_IN_SECONDS (24 часа).

Мы можем играть с фильтром oembed_ttl , как здесь , но тем временем мы также можем фильтровать кешированный вывод с embed_oembed_html фильтра embed_oembed_html .

Вот пример:

 add_filter( 'embed_oembed_html', function( $cache, $url, $attr, $post_id ) { // override the cached HTML result for Facebook posts if( preg_match( '#https?://www\.facebook\.com/.*/posts/.*#i', $url ) ) $cache = sprintf( '<div class="fb-post" data-href="%s">%s</div>', esc_url( $url ), esc_url( $url ) ); return $cache; }, 10, 4 ); 

Вам нужно использовать функцию php preg_replace , чтобы преобразовать ваш url в фрагмент.

Пожалуйста помни:

  • URL-адреса должны быть запущены с помощью http://facebook.com/ или https://facebook.com/ для работы функции.
  • Если вы когда-нибудь попытаетесь добавить ссылку, не обращаясь к фрагменту, вы столкнетесь с проблемами, так как эта функция превратит любую ссылку facebook в фрагмент.
  • Я сам не тестировал код, вы можете проверить эту ссылку и изменить правила для достижения наилучших результатов.

Добавьте следующий код в файл function.php :

  add_filter( 'the_content', 'the_facebook_filter', 20 ); function the_facebook_filter( $content ) { $fb_links = wp_extract_urls( $content ); $string = preg_replace('#http://facebook.com/(.*?)#i', '<div class="fb-post" data-href="\1" max-width="90%"></div>', $fb_links[0]); $string = preg_replace('#https://facebook.com/(.*?)#i', '<div class="fb-post" data-href="\1" max-width="90%"></div>', $fb_links[0]); return $string; }