禁用WordPress短代码内的自动格式化

时间:2011-05-09 18:23:19

标签: wordpress

我已经看过有关创建[原始]短代码的教程,使其中的代码保持不变,

http://www.wprecipes.com/disable-wordpress-automatic-formatting-on-posts-using-a-shortcode

但不幸的是,这一次仅适用于1个短代码...并且b / c else语句绕过普通过滤器并调用函数方向,我对autop和texturize函数的其他修改将被忽略。

有没有办法1.匹配多个短代码和2.保留我的其他添加/删除过滤器到the_content?

4 个答案:

答案 0 :(得分:45)

在多个网站上实施@helgatheviking的解决方案之后,我确信只需要这些行:

//move wpautop filter to AFTER shortcode is processed
remove_filter( 'the_content', 'wpautop' );
add_filter( 'the_content', 'wpautop' , 99);
add_filter( 'the_content', 'shortcode_unautop',100 );

将它们放入functions.php文件中即可设置。

答案 1 :(得分:8)

通过结合Donal MacArthur的一个稍微修改过的parse_shortcode_content函数来解决这个问题(他最初手动调用wpautop ...我已经将其删除了。重新排序默认过滤器以便稍后运行wpautop ...在短代码已经处理之后而不是之前。

//Clean Up WordPress Shortcode Formatting - important for nested shortcodes
//adjusted from http://donalmacarthur.com/articles/cleaning-up-wordpress-shortcode-formatting/
function parse_shortcode_content( $content ) {

   /* Parse nested shortcodes and add formatting. */
    $content = trim( do_shortcode( shortcode_unautop( $content ) ) );

    /* Remove '' from the start of the string. */
    if ( substr( $content, 0, 4 ) == '' )
        $content = substr( $content, 4 );

    /* Remove '' from the end of the string. */
    if ( substr( $content, -3, 3 ) == '' )
        $content = substr( $content, 0, -3 );

    /* Remove any instances of ''. */
    $content = str_replace( array( '<p></p>' ), '', $content );
    $content = str_replace( array( '<p>  </p>' ), '', $content );

    return $content;
}

并移动过滤器

//move wpautop filter to AFTER shortcode is processed
remove_filter( 'the_content', 'wpautop' );
add_filter( 'the_content', 'wpautop' , 99);
add_filter( 'the_content', 'shortcode_unautop',100 );

编辑:

不再需要parse_shortcode_content()功能(如果有的话)。只需调整过滤顺序即可。

答案 2 :(得分:5)

就我而言 - 这个解决方案打破了其中一个侧面短代码(revslider)。 所以我在这里找到了另一个解决方案: http://wordpress-hackers.1065353.n5.nabble.com/shortcode-unautop-tp42085p42086.html 这是使用另一个过滤器:

// via http://www.wpexplorer.com/clean-up-wordpress-shortcode-formatting/
if ( !function_exists('wpex_fix_shortcodes') ) {
    function wpex_fix_shortcodes($content){
        $array = array (
            '<p>[' => '[',
            ']</p>' => ']',
            ']<br />' => ']'
        );
        $content = strtr($content, $array);
        return $content;
    }
    add_filter('the_content', 'wpex_fix_shortcodes');
}

适合我的工作:)

答案 3 :(得分:1)

请在此处查看我的回答: https://wordpress.stackexchange.com/questions/55782/remove-wpautop-from-shortcode-content-remove-whitespace-in-buffering/211784#answer-211784

它允许您使用此功能关闭wpautop以获取任意数量的特定短代码:

include "shortcode-wpautop-control.php";
chiedolabs_shortcode_wpautop_control(array('shortcodeone', 'shortcodetwo'));