Результат, достигнуты в этой записи меня устроил, однако при использовании приходится всё еще заменять специальные символы html на их коды. Что не очень удобно.
Поэтому я продолжил свои извращения и редактирование функции wpautop в файле движка wp-includes/formatting.php. Немного изменив обработку code, добавленную ранее:
//обработка тега коде в функции wpautop
//после почти аналогичной тега pre
if ( strpos($pee, '<code>') !== false ) {
//нарезаем кусочки до </code> и формируем массив? ну что-то такое
$pee_parts = explode( '</code>', $pee );
//верхнюю часть массива изымаем? наверняка
$last_pee = array_pop($pee_parts);
$pee = '';
$i = 0;
//цикл, в котором обрабатывается каждый элемент массива
foreach ( $pee_parts as $pee_part ) {
//позиция начала <code>
$start = strpos($pee_part, '<code>');
//при неверном html продолжаем
if ( $start === false ) {
$pee .= $pee_part;
continue;
}
//??? видимо необходимо для дальнейшей обработки
$name = "<code wp-code-tag-$i></code>";
//вырезаем часть, после тега <code>
$code_content = substr( $pee_part, $start + strlen( '<code>' ) );
//преобразуем специальные символы в их html-обозначения
//при этом не трогаем уже существующие,
//для чего служит false в конце
$code_content = htmlentities( $code_content,
ENT_COMPAT | ENT_HTML401,
ini_get("default_charset"),
false);
//добавляем в массив со строчными индексами бутербродик
//из <code>, преобразованного контента и </code>
$pre_tags[$name] = '<code>' . $code_content . '</code>';
//делаем некоторую неведомую хрень, я уже почти уверен, что это нужно для пост-обработки
$pee .= substr( $pee_part, 0, $start ) . $name;
$i++;
}
//склеиваем последний кусочек
$pee .= $last_pee;
}
Я не знаю php, поэтому решение неидеально, за что извиняюсь. Но результат достигнут, теперь всякие:
<><><><>&
не нужно постоянно заменять на html-обозначения при написании поста внутри тега code.
Такой вариант уже получше, и работает везде, где внутри нет собственно тега <code> и </code>, по понятным причинам 😉