用条件替换<p> </p>

时间:2013-07-17 10:50:37

标签: php jquery regex preg-replace

在wordpress中,我在短代码的内容中输出了一些<div>个。问题是因为wordpress将段落放在<p></p>标记内,该行在<div>所在的地方被破坏。 我想要实现的是用<p> </p>替换我的短代码周围的<br />。 例如,如果我的内容如下所示:

<p>[shortcodes attr='somethig']value[/shortcode] text<br />
[shortcodes attr='somethig']value[/shortcode] text<br />
text<br />
text [shortcodes attr='somethig']value[/shortcode] text </p>
<p>text<br />
text [shortcodes attr='somethig']value[/shortcode] text<br />
text</p>
<p> text without shortcode </p>
<p>text [shortcodes attr='somethig']value[/shortcode] text </p>

我需要它来转换它

<br/>[shortcodes attr='somethig']value[/shortcode] text<br />
[shortcodes attr='somethig']value[/shortcode] text<br />
text<br />
text [shortcodes attr='somethig']value[/shortcode] text <br />
<br/>text<br />
text [shortcodes attr='somethig']value[/shortcode] text<br />
text<br/>
<p> text without shortcode </p>
<br/>text [shortcodes attr='somethig']value[/shortcode] text <br/>

我试图自己解决问题,但我的preg_replace表达式捕获了整个内容,而不是单个<p> </p>块。

使用jQuery的解决方案也可以(但不是短代码,段落中必须包含具有特定类的<div>

LE:以下jQuery有效。但是,我仍然在等待PHP中更优雅的解决方案。

$('p').each(function() {
    if ($(this).next().find('.measurement_value').length > 0) 
    {
        $(this).replaceWith(  '<br />' + $(this).html());
    }
});

2 个答案:

答案 0 :(得分:1)

试试这个jquery代码:

$('p').each(function() {
    if ($(this).find('.class-of-the-div').length > 0) {
        $(this).replaceWith($(this).html() + '<br />');
    }
});

但是,通常,Wordpress会在服务器端用<br />替换<p></p>

答案 1 :(得分:0)

为什么不通过在functions.php中添加<p>来摆脱remove_filter('the_content', 'wpautop');