<p>标记分隔符短码输出(其他解决方案不起作用)

时间:2015-01-18 作者:Igor Yavych

我只是遇到了一个奇怪的问题。我的短代码输出如下

\'<span class="link_container"><a href="#">\'.$content.\'</a></span>    
<div class="upgrade_box">
some more divs here
</div>\'
被随机破坏</p> 结束标记插入后</span>

更改wpautop优先级无效。唯一可行的解决方案是完全删除wpautop过滤器,这显然不是一个很好的解决方案。

P、 我在我的测试网站上使用wp 2015主题,所以它不是ppl似乎有问题的主题林主题。

2 个回复
SO网友:NickFMC

尝试此函数,确保在数组中添加您的短代码

// (OPT) STOP SHORTCODES THAT DON\'T USE INLINE CONTENT FROM BEING WRAPPED IN A P TAG (until WP fixes this)

// ** NOTE -> BE SURE TO change the array to the shortcodes you are using!

add_filter(\'the_content\', \'the_content_filter\');
function the_content_filter($content) {
    // array of custom shortcodes requiring the fix
    $block = join("|",array( \'shortcode_name\' ));
    // opening tag
    $rep = preg_replace("/(<p>)?\\[($block)(\\s[^\\]]+)?\\](<\\/p>|<br \\/>)?/","[$2$3]",$content);
    // closing tag
    $rep = preg_replace("/(<p>)?\\[\\/($block)](<\\/p>|<br \\/>)?/","[/$2]",$rep);
    return $rep;
}

SO网友:Corey

根据@nickfmc的评论,这里是最新WordPress的修订版本,它在过滤器上使用了正确的优先级,并且还修复了regex的一些问题。

注意:最好将每个块格式的短代码保留在自己的行上(WYSIWYG编辑器中的单独段落)。

<?php

add_filter(\'the_content\', function ($content) {
    $blocks = \'columns|column\';

    $replace = [
        "/(?:<p>)?\\[($blocks)(\\s[^\\]]+)?\\](?:<\\/p>|<br\\s*\\/?>)?/" => \'[$1$2]\',
        "/(?:<p>)?\\[\\/($blocks)\\](?:<\\/p>|<br\\s*\\/?>)?/" => \'[/$1]\',
    ];

    return preg_replace(array_keys($replace), array_values($replace), $content);
}, \'10.1\');
当然,更换$blocks 具有您自己的短代码的变量。

结束

相关推荐

JQuery Plugins in Wordpress

我已经能够在某种程度上拼凑出应该如何做到这一点,但我真的很难做到这一点。我想使用Table Sorter插件(http://tablesorter.com) 在自定义页面模板中显示数据,但我不确定它是否正确。我已经钩住了“wp\\u enqueue\\u scripts”,并使用此函数将表分类器JS文件排入队列。我相信这是正确的,但是我还需要在JQuery Ready()函数中放置一行,但是我不确定如何从自定义页面模板中执行此操作。有人能解释一下吗?<?php /* Templat