只发布没有完整代码片段的Facebook URL

时间:2017-01-21 作者:Adam

目标:将Facebook url本身(无完整代码片段)转换为网站前端的Facebook帖子

问题:默认情况下,实验性的o2/p2/breathe主题会将编辑器中的完整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%"> 在源代码中。

我想我需要通过函数来实现这一点。php?

2 个回复
最合适的回答,由SO网友:birgire 整理而成

请注意,Facebook是WordPress核心中注册的oEmbed提供商。

例如,您可以使用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 );
当您将Facebook帖子url粘贴到帖子内容编辑器中时,它还会显示修改后的oEmbed结果以及我们的代码片段。

oEmbed结果为cached 默认情况下,在Posteta表中DAY_IN_SECONDS (24小时)。

我们可以玩oembed_ttl 过滤器,如here, 但与此同时,我们还可以使用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 );

SO网友:Johansson

您需要使用phppreg_replace函数将url转换为代码段。

请记住:

URL必须以开头http://facebook.com/https://facebook.com/ 使功能正常工作this 链接和修改规则以获得最佳结果向您添加以下代码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;
}

相关推荐

初学者问题:通过管理Web界面访问Functions.php以导入自定义帖子类型?

是否可以访问这些功能。php文件仅仅使用管理web界面?我正在尝试访问以前创建的(手动编码的)自定义帖子类型,我不得不跳过很多障碍,因为我无法访问函数中的代码。php文件。我已经浏览了很多帮助页面,但建议的步骤似乎总是涉及到函数。php文件(我无法访问)或使用插件中的导入/导出工具,该插件首先创建了自定义帖子类型(据我所知,没有使用任何插件)。这似乎是一个非常基本的问题,但我一辈子都想不出来。任何帮助都将不胜感激!