首页 > 解决方案 > Wordpress 插件简码 - 内容自动中断,但 HTML 不自动中断

问题描述

我正在使用我自己创建的一个简单插件为手风琴创建一个私人 wordpress 短代码。

问题:Wordpress 在我的 HTML 结果中添加了中断和段落,这导致了设计损坏。

我可以删除自动中断,但它也不适用于包含段落的真实内容。但我不想在后端使用 p-tags。

如何阻止 wordpress 对我的 HTML 进行自动中断,但仍然为我的包装内容这样做?

该解决方案必须在插件中工作 - 不影响其他插件/功能。

我可以删除我的简码之间的任何间距,因此 wordpress 不会添加任何中断。但这很难读。

这样它的工作原理:

[os_accordion][os_spoiler title="Title"]Content with some

breaks.[/os_spoiler][/os_accordion]

这样它不会:

[os_accordion]
[os_spoiler title="Title"]
Content with some

breaks.
[/os_spoiler]
[/os_accordion]

我尝试使用一个函数来删除中断,但它不起作用。

//Helper to remove autops
function cleanup_shortcode_fix($content) {
    $array = array('<p>[' => '[', ']</p>' => ']', ']<br />' => ']', ']<br>' => ']');
    $content = strtr($content, $array);
    return $content;
}

//Outer accordion wrapper
function function_accordion($atts, $content = null){
    $html = '<div class="accordion">'.do_shortcode($content).'</div>';
    return cleanup_shortcode_fix($html);

}
add_shortcode('os_accordion', 'function_accordion');

//Inner wraps
function function_spoiler($atts, $content = null){

    //set default attributes and values
    $values = shortcode_atts( array(
        'title'     => '',
    ), $atts );

    //Output buffer
    ob_start();
    ?>

    <div class="toggle"><?php echo esc_attr($values['title']); ?></div>
    <div class="content"><?php echo $content; ?></div>

    <?php
    return ob_get_clean(); //Close buffer and return data
}
add_shortcode('os_spoiler', 'function_spoiler');

有什么想法可以使最后一个版本正常工作吗?我被困住了。:/

标签: phpwordpress

解决方案


这应该这样做。它可能只是在所有内容之后加上 p 标签。

remove_filter('the_content', 'wpautop');

推荐阅读