Сломан ли шорткод unautop()?


shortcode_unautop() в /wp-includes/formatting.php предполагается найти короткие коды в блоке текста и удалить из них теги оберточных абзацев.

У меня возникли проблемы с тегами абзацев, проходящими через этот процесс.

Вот вывод из var_dump($pee), который я поместил в самом начале функции, т. Е. Строки перед обработкой:

string(353) "<p>[row wrap="true"]</p>
<p>[one_half]</p>
<p>[text_block]Fusce blandit adipiscing libero, nec bibendum diam volutpat tempor.[/text_block]</p>
<p>[/one_half]</p>
<p>[one_half last="true"]</p>
<p>[text_block]Donec fermentum diam leo, ut convallis nisl tristique ut. Ut rhoncus leo vitae tempus pulvinar.[/text_block]</p>
<p>[/one_half]</p>
<p>[/row]</p>
"

Все завернуто в теги абзацев, как и ожидалось.

Затем я помещаю var_dump(preg_replace( $pattern, '$1', $pee )); непосредственно перед концом функции, которая дает:

string(346) "[row wrap="true"]</p>
<p>[one_half]</p>
<p>[text_block]Fusce blandit adipiscing libero, nec bibendum diam volutpat tempor.[/text_block]</p>
<p>[/one_half]</p>
<p>[one_half last="true"]</p>
<p>[text_block]Donec fermentum diam leo, ut convallis nisl tristique ut. Ut rhoncus leo vitae tempus pulvinar.[/text_block]</p>
<p>[/one_half]</p>
<p>[/row]
"

Все, что он сделал, это удалил открывающие и закрывающие теги со всего блока, а не с каждого отдельного шорткода. Я проверил значение global $shortcode_tags;, и все короткие коды в моем примере были в нем.

Функция нарушена, или я ожидаю от нее слишком многого? Я почти уверен, что это не так, и предполагается удалить все теги абзацев, но я не могу отделаться от мысли, что происходит что-то еще, например, неожиданные пробелы или что-то в этом роде.

Author: EpF, 2015-02-14

2 answers

Похоже, функция нарушена. Проблема в trac: https://core.trac.wordpress.org/ticket/14050

Я использую это для временного решения проблемы: https://core.trac.wordpress.org/attachment/ticket/14050/plugin.php . Этот код по-прежнему не проходит некоторые из используемых тестов, но он полностью решает проблему, которую я описал, поэтому я буду использовать его, если не найду что-то практичное, что он сломает.

 2
Author: EpF, 2015-02-15 14:58:32

Я читал документацию WordPress об этой функции, и поведение, которое вы там наблюдаете, является ожидаемым.

Эта функция очищает снаружи шорткода, а не внутри. Регулярное выражение не проверяет содержимое шорткода.

ИЗМЕНИТЬ:

Https://developer.wordpress.org/reference/functions/shortcode_unautop/

Не включайте автоматически короткие коды, которые стоят отдельно

Гарантирует, что короткие коды не завернутый в <p>...</p>.

Там все сказано.

 1
Author: mathieuhays, 2015-02-15 14:55:25