使用快捷码时出现错误的结束段落标记

时间:2013-09-03 作者:hereswhatidid

我正在使用一个基本的短代码将一些文本包装在一个可扩展的div中。似乎发生的是,wpautop在包装的内容的开头插入了一个错误的结束段落标记,在结尾插入了一个错误的开始段落标记。

以下是它在编辑器中的外观:

[可展开文本=“显示内容”]

Lorem ipsum dolor sit amet,concetetur adipiscing elit。马来酸乳酵母菌。潜力悬而未决。埃尼安·杜伊·图尔皮斯(Aenean dui turpis),奥纳(ornare)位于同侧,前庭位于空侧。

[/可扩展]

以及呈现的HTML:

<div class="expandable"><a href="#" class="expand-link">Show Content</a></p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras fermentum facilisis malesuada. Suspendisse potenti. Aenean dui turpis, ornare in ipsum eget, vestibulum egestas nulla.</p>
<p></div>
这是shortcode函数:

function expandable_content_shortcode( $atts, $content = null ) {
    $args = shortcode_atts( array(
        \'text\' => __( \'View More\', $this->plugin_slug ),
        \'linklocation\' => \'top\'
    ), $atts, \'expandable\' );

    if ( $args[\'linklocation\'] === \'top\' ) {
        $output = \'<div class="expandable-content"><a href="#" class="expand-link">\' . $args[\'text\'] . \'</a>\' . $content . \'</div>\';
    } else {
        $output = \'<div class="expandable-content">\' . $content . \'<a href="#" class="expand-link">\' . $args[\'text\'] . \'</a></div>\';
    }

    return $output;
}

2 个回复
SO网友:Gruffy

这是一个令人沮丧的问题,因为我无法依赖内容编辑器对Wordpress/HTML足够精通,以理解他们输入的文本将如何被解析。。。

--编辑--

我仔细考虑了一下,重新考虑了我先前的回答。HTML5+附带Tidy extension, 如果您能够在服务器上使用此功能,则以下操作将起作用:

function cleanUpAutoP($content)
    {
        $tidy = new Tidy();
        // Switch out the encoding an doctype in $tidyArgs to suit your use case
        // \'show-body-only\' HTML to be parsed as a fragment
        // rather than a whole document
        $tidyArgs = array(  \'doctype\' => \'html\',
                            \'input-encoding\' => \'utf8\',
                            \'output-encoding\' => \'utf8\',
                            \'show-body-only\' => true
                    );
        // Return the repaired string
        return $tidy->repairString($content, $tidyArgs);
    }
这样,您就可以享受甜美的P标签的所有好处,而不用担心wpautop会把事情搞砸。其他选项$tidyArgs 可以在中看到the documentation.

如果由于任何原因无法使用Tidy,则应仍然有效:

function cleanUpAutoP($content) {

    // Replace all OPENING paragraph tags with <br /><br />
    $content = preg_replace(\'/<p[^>]*>/\', \'<br /><br />\', $content);

    // Remove all CLOSING p tags
    $content = str_replace(\'</p>\', \'\', $content);


    return $content;
}
后一种方法的明显缺点是,我无法将样式应用于短代码中的p标记,但除非有更好的解决方案出现,或者问题在Wordpress中得到解决,否则就可以了!

SO网友:RuFFCuT

安装WP RAW HTML plugin.

这将在管理中的每篇文章的右侧插入额外的复选框-选中“禁用自动段落创建”的复选框,这将解决您的问题。

但请确保您已经用正确的标签包围了该帖子上的内容。

您可以通过删除过滤器来实现这一点,但此解决方案只允许您在需要时禁用它,而且更简单。

结束

相关推荐

未过滤的包含UPDATE_POST_META的html

我有buddypress安装。在发布活动时,我将一些数据(html)作为元数据。让我展示一些代码:这是在发布活动时触发的操作。function add_activitylink_to_activity( $content, $user_id, $activity_id ) { ?> <script type=\"text/javascript\" > var activity_id = \'<?php echo $activity_id; ?>\';&