Я создаю приватный шорткод WordPress для аккордеона, используя простой плагин, созданный мной.
Проблема: Wordpress добавляет разрывы и абзацы к моему HTML-результату, что приводит к нарушению дизайна.
Я могу удалить авторазрывы, но тогда это также не работает для реального контента, у которого есть параграфы. Но я не хочу использовать p-тэги в бэкэнде.
Как я могу помешать 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');
Есть идеи, как заставить работать последнюю версию? Я застрял. : /