14

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

我试过这个但它不起作用:

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

7 回答 7

15

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

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

在此处输入图像描述

于 2014-01-30T15:17:49.943 回答
6

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

我发现如果您指定 10 作为优先级,它会起作用;没有其他号码可以工作。

于 2013-01-29T20:08:32.193 回答
2

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

就我而言,我基本上想删除所有格式不佳的标签<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 参数的默认方式。

于 2018-02-28T00:00:50.673 回答
0

也许正则表达式可以工作:

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

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

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

于 2012-11-22T10:08:03.940 回答
0

您应该增加过滤器的优先级。

这应该工作

add_filter('the_content', 'cleanup_shortcode_fix', 1);
于 2012-11-22T10:08:28.163 回答
0

你可以删除

标记输入

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

而不是 the_content()

于 2014-02-22T07:15:05.010 回答
-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]

此解决方案需要一些知识,但它确实有效!
希望这可以帮助...

于 2014-01-09T16:32:26.950 回答