当我更新到WP 3.6.1时,_Content上的过滤器停止工作

时间:2013-09-18 作者:Laurie M. Rauch

我创建了一个过滤器,在我的博客文章的图像上添加了一个pin按钮,这在玩了很多次之后就奏效了。几周后,我更新到3.6.1,过滤器停止工作。

新版本中是否有更改,阻止了对\\u内容的筛选工作?

function cd_insert_pinterest($content) {
        global $post;
        $postID = $post->ID;
           if( is_singular() && is_main_query() ) {
                $posturl = urlencode(get_permalink()); //Get the post URL
                $pindiv = \'<span class="pinterest-button">\';
                $pinurl = \'<a href="http://pinterest.com/pin/create/button/?url=\'.$posturl.\'&media=\';
                $pindescription = \'&description=\'.urlencode(get_the_title());
                $pinfinish = \'" class="pinning"></a>\';
                $pinend = \'</span>\';
                $pattern = \'/<img(.*?)src="(.*?).(bmp|gif|jpeg|jpg|png)" (.*?) width="(.*?)" height="(.*?)" \\/>/i\';
                $replacement = $pindiv.$pinurl.\'$2.$3\'.$pindescription.$pinfinish.\'<img$1src="$2.$3" $4 width="$5" height="$6" />\'.$pinend;
                $content = preg_replace( $pattern, $replacement, $content );
                $newpattern = \'/<a(.*?)><span class="pinterest-button"><a(.*?)><\\/a><img(.*?)\\/><\\/span><\\/a>/i\';
                $replacement = \'<span class="pinterest-button"><a$2></a><a$1><img$3\\/></a></span>\';
                $content = preg_replace( $newpattern, $replacement, $content );
           }
                                return $content;

}

add_filter( \'the_content\', \'cd_insert_pinterest\');

1 个回复
SO网友:OACDesigns

这似乎是您的正则表达式模式匹配图像的问题。

我修改了$pattern 它在测试页面I设置中起作用。

$pattern = \'/<img(.*?)src="(.*?).(bmp|gif|jpeg|jpg|png)"(.*?)width="(.*?)" height="(.*?)" \\/>/i\';
有一些额外的空间正在将其丢弃。

我建议使用RegEx测试工具来帮助您确保您的模式与来自wordpress的内容正确匹配。这是我用来检查你的图案的:

http://gskinner.com/RegExr/

另一方面,一般来说,很难说出使用两个preg\\u replace函数想要实现什么。我相信它可以大大简化。。。

结束

相关推荐

Apply_Filters()和_Excerpt提供了意外的结果

我觉得我一定错过了一些显而易见的东西,但我似乎无法让WordPress合作。我正在用一个函数生成Facebook OG标签。除了摘录,一切都很好。自get_the_excerpt($post->ID), 有没有其他方法可以创建摘录而不必创建一个全新的循环?我觉得这太过分了。我的第一反应是apply_filters():$description = apply_filters(\'the_excerpt\', get_post($post->ID)->post_content);