Сломан ли шорткод 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;
, и все короткие коды в моем примере были в нем.
Функция нарушена, или я ожидаю от нее слишком многого? Я почти уверен, что это не так, и предполагается удалить все теги абзацев, но я не могу отделаться от мысли, что происходит что-то еще, например, неожиданные пробелы или что-то в этом роде.
2 answers
Похоже, функция нарушена. Проблема в trac: https://core.trac.wordpress.org/ticket/14050
Я использую это для временного решения проблемы: https://core.trac.wordpress.org/attachment/ticket/14050/plugin.php . Этот код по-прежнему не проходит некоторые из используемых тестов, но он полностью решает проблему, которую я описал, поэтому я буду использовать его, если не найду что-то практичное, что он сломает.
Я читал документацию WordPress об этой функции, и поведение, которое вы там наблюдаете, является ожидаемым.
Эта функция очищает снаружи шорткода, а не внутри. Регулярное выражение не проверяет содержимое шорткода.
ИЗМЕНИТЬ:
Https://developer.wordpress.org/reference/functions/shortcode_unautop/
Не включайте автоматически короткие коды, которые стоят отдельно
Гарантирует, что короткие коды не завернутый в
<p>...</p>
.
Там все сказано.