通过php函数从wordpress短代码中删除空的<p>标签</p>

时间:2012-11-22 10:02:32

标签: php wordpress function shortcode

寻找一个php函数(非jQuery或wpautop修改)方法从wordpress中删除<p></p>

我尝试了这个,但它不起作用:

        function cleanup_shortcode_fix($content) {   
          $array = array (
            '<p>[' => '[', 
            ']</p>' => ']', 
            ']<br />' => ']',
            ']<br>' => ']'
          );
          $content = strtr($content, $array);
            return $content;
        }
        add_filter('the_content', 'cleanup_shortcode_fix');

7 个答案:

答案 0 :(得分:14)

尝试在functions.php文件中插入此代码:

remove_filter( 'the_content', 'wpautop' );
add_filter( 'the_content', 'wpautop', 99 );
add_filter( 'the_content', 'shortcode_unautop', 100 );

答案 1 :(得分:5)

add_filter('the_content', 'cleanup_shortcode_fix', 10);

我发现如果你指定10作为优先级它是有效的;没有其他号码可以使用。

答案 2 :(得分:1)

这是一个老问题,但我今天解决了这个问题并且认为我会分享。

在我的情况下,我基本上想要删除所有格式不正确的<p><br>标记,但是您需要将它们正确添加回来,以便短代码中的文本格式正确。

/*
 * Half column shortcode
 */
    function custom_shortcode_half_column( $atts, $content = '') {
        $content = custom_filter_shortcode_text($content);
        return '<div class="half-column">'. $content .'</div>';
    }
    add_shortcode( 'half-column', 'custom_shortcode_half_column' );


/*
 * Utility function to deal with the way WordPress auto formats text in a shortcode.
 */
    function custom_filter_shortcode_text($text = '') {
        // Replace all the poorly formatted P tags that WP adds by default.
        $tags = array("<p>", "</p>");
        $text = str_replace($tags, "\n", $text);

        // Remove any BR tags
        $tags = array("<br>", "<br/>", "<br />");
        $text = str_replace($tags, "", $text);

        // Add back in the P and BR tags again, remove empty ones
        return apply_filters('the_content', $text);
    }

在我看来,这应该是WordPress解析短代码$ content参数的默认方式。

答案 3 :(得分:0)

也许正则表达式可以起作用:

$string=preg_replace_('/<p>\s*</p>/', '', $string);

那应该将任何<p></p>替换为任何内容,或者只将其中的空格替换为空,从而删除它们。

将正则表达式应用于HTML代码时,最好先删除HTML的\r\n,因为它们会阻止正则表达式工作。

答案 4 :(得分:0)

您应该提高过滤器的优先级。

这应该有效

add_filter('the_content', 'cleanup_shortcode_fix', 1);

答案 5 :(得分:0)

您可以删除

标记输入

<?php echo $post->post_content; ?>

而不是the_content()

答案 6 :(得分:-4)

你需要的是jquery和php的混合...这是唯一的工作方式
我觉得工作得很好。我在我的网站上有教程但是 为了保持内部的内容,

jQuery:
将此包含在您已经入队的某个JS文件中

jQuery(function($){
    $('div#removep > p').filter(function() {
        return $.trim($(this).text()) === '' && $(this).children().length == 0
    })
    .remove()
})

以后可以使用的短代码:
你的functions.php或包含文件中的

function sght_removep( $atts, $content = null ) {return '<div id="removep">'.do_shortcode($content).'</div>';}
add_shortcode('removep', 'sght_removep');

现在你可以包装这样的特定内容:

[removep]
Some text i write directly in wordpress wysiwyg
<p></p> <-- this would get removed
[/removep]

这个解决方案需要一些知道,但它的工作原理!
希望这会有所帮助...