Отключить автоматическое форматирование внутри коротких кодов WordPress
Я видел учебники по созданию короткого кода [raw], который оставляет код внутри него нетронутым,
http://www.wprecipes.com/disable-wordpress-automatic-formatting-on-posts-using-a-shortcode
но, к сожалению, это относится только к 1 короткому коду за один раз... И b/c оператор else обходит обычные фильтры и вызывает направления функций, мои другие модификации функций autop и texturize игнорируются.
Есть ли способ 1. совместить несколько коротких кодов и 2. сохранить мои другие фильтры добавления/удаления в the_content?
Ответы
Ответ 1
После внедрения решения @helgatheviking на нескольких веб-сайтах я убежден, что нужны только эти строки:
//move wpautop filter to AFTER shortcode is processed
remove_filter( 'the_content', 'wpautop' );
add_filter( 'the_content', 'wpautop' , 99);
add_filter( 'the_content', 'shortcode_unautop',100 );
Поместите их в ваш файл functions.php
, и вы установите.
Ответ 2
решил это как можно лучше, объединив слегка модифицированную функцию parse_shortcode_content от Donal MacArthur (его изначально вручную вызывал wpautop... который я удалил. с переупорядочением фильтров по умолчанию для запуска wpautop намного позже... после того, как короткий код уже был обработан, а не ранее.
//Clean Up WordPress Shortcode Formatting - important for nested shortcodes
//adjusted from http://donalmacarthur.com/articles/cleaning-up-wordpress-shortcode-formatting/
function parse_shortcode_content( $content ) {
/* Parse nested shortcodes and add formatting. */
$content = trim( do_shortcode( shortcode_unautop( $content ) ) );
/* Remove '' from the start of the string. */
if ( substr( $content, 0, 4 ) == '' )
$content = substr( $content, 4 );
/* Remove '' from the end of the string. */
if ( substr( $content, -3, 3 ) == '' )
$content = substr( $content, 0, -3 );
/* Remove any instances of ''. */
$content = str_replace( array( '<p></p>' ), '', $content );
$content = str_replace( array( '<p> </p>' ), '', $content );
return $content;
}
и перемещение фильтров
//move wpautop filter to AFTER shortcode is processed
remove_filter( 'the_content', 'wpautop' );
add_filter( 'the_content', 'wpautop' , 99);
add_filter( 'the_content', 'shortcode_unautop',100 );
EDIT:
Функция parse_shortcode_content()
больше не требуется (если она когда-либо была). Просто отрегулируйте порядок фильтров.
Ответ 3
В моем случае - это решение сломало один из боковых коротких кодов (revslider).
Итак, я нашел другое решение здесь:
http://wordpress-hackers.1065353.n5.nabble.com/shortcode-unautop-tp42085p42086.html
который должен использовать другой фильтр следующим образом:
// via http://www.wpexplorer.com/clean-up-wordpress-shortcode-formatting/
if ( !function_exists('wpex_fix_shortcodes') ) {
function wpex_fix_shortcodes($content){
$array = array (
'<p>[' => '[',
']</p>' => ']',
']<br />' => ']'
);
$content = strtr($content, $array);
return $content;
}
add_filter('the_content', 'wpex_fix_shortcodes');
}
Прекрасно работает для меня:)
Ответ 4
Пожалуйста, см. мой ответ здесь:
https://wordpress.stackexchange.com/info/55782/remove-wpautop-from-shortcode-content-remove-whitespace-in-buffering/211784#answer-211784
Он позволяет отключить wpautop для любого количества коротких кодов, которые вы хотите использовать:
include "shortcode-wpautop-control.php";
chiedolabs_shortcode_wpautop_control(array('shortcodeone', 'shortcodetwo'));