自动嵌入不适用于段落

时间:2013-09-22 作者:Paul

我正在posts编辑器的“文本”模式下编写以下代码。

是否有效:

http://www.youtube.com/watch?v=xxxxxxxxxxx
是否有效:

<p>test
http://www.youtube.com/watch?v=xxxxxxxxxxx
test</p>
不起作用:

<p>http://www.youtube.com/watch?v=xxxxxxxxxxx</p>
最后一个链接未转换为YouTube视频。我想知道是否有人也注意到了这一点,是否有已知的修复方法?

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

原因why 这正在发生,似乎可以在文件中找到wp-includes/class-wp-embed.phpautoembed 回拨方式:

/**
 * Passes any unlinked URLs that are on their own line to {@link WP_Embed::shortcode()} for potential embedding.
 *
 * @uses WP_Embed::autoembed_callback()
 *
 * @param string $content The content to be searched.
 * @return string Potentially modified $content.
 */
function autoembed( $content ) {
    return preg_replace_callback( \'|^\\s*(https?://[^\\s"]+)\\s*$|im\', array( $this, \'autoembed_callback\' ), $content );
}
在哪里

// Attempts to embed all URLs in a post
add_filter( \'the_content\', array( $this, \'autoembed\' ), 8 );
据我所知,匹配行必须只包含一个链接,该链接可以由链接前后的任意数量的空格字符包装。

所以这个模式会排除这条线:

<p>http://www.youtube.com/watch?v=xxxxxxxxxxx</p>
您可以尝试添加自己的the_content 在链接周围的段落标记内的链接前后添加新行的过滤器。这应该在autoembed 筛选器已执行,因此它的优先级应为8.

过滤器示例:

你可以在这个伟大的在线工具中使用正则表达式:

http://regexr.com?36eat

在插入图案的位置:

^<p>\\s*(https?://[^\\s"]+)\\s*</p>$
更换后:

<p>\\n$1\\n</p>
您可以根据需要进行调整。

以下是此类自定义过滤器的一个想法:

add_filter( \'the_content\', \'my_autoembed_adjustments\', 7 );

/**
 * Add a new line around paragraph links
 * @param string $content
 * @return string $content
 */
function my_autoembed_adjustments( $content ){

    $pattern = \'|<p>\\s*(https?://[^\\s"]+)\\s*</p>|im\';    // your own pattern
    $to      = "<p>\\n$1\\n</p>";                          // your own pattern
    $content = preg_replace( $pattern, $to, $content );

    return $content;

}

结束

相关推荐

Shortcode in AJAX popup

我试图使用Ultimate Facebook插件的一个短代码在AJAX弹出窗口中显示FB connect按钮,但似乎无法正常工作。我搜索并使用了djb在这个问题上给出的解决方案-Why might a plugin's 'do_shortcode' not work in an AJAX request?, 但它只起了部分作用。理想情况下,我希望用户能够使用FB登录,然后将列表保存到她的帐户。我想使用插件而不是嵌入直接代码,因为当有人使用FB connect时,也会在wordpre