Ajax, фильтры и короткие коды
Не могли бы вы выяснить, почему я не могу применить фильтры шорткода при включении сообщений в ajax?
Позвольте мне объяснить лучше: мне удалось включить сообщение из другого сообщения через admin-ajax.php , как рекомендовано в знаменитых 5 советах.
Очевидно, что я не хочу отображать теги шорткода, и я не хотел бы их удалять, поэтому я повторяю do_shortcode($post->post_content)
На этом этапе галерея сообщений отображается, но нефильтрованный, хотя я использую плагин "Более чистая галерея", который начинается с add_filter( 'post_gallery', 'cleaner_gallery', 10, 2 );
и успешно работает в обычных (не ajax) сообщениях.
Я пытался решить эту проблему, заменив
$output = apply_filters('post_gallery', '', $attr);
if ( $output != '' )
return $output;
С
$output = apply_filters('post_gallery', '', $attr);
echo 'FILTERED OUTPUT = '.$output.' !';
if ( $output != '' )
return $output;
Внутри функции gallery_shortcode($attr), расположенной в wp-includes/media.php . Кажется, что он запускается дважды, но в включениях ajax вывод сначала пустой, а затем не фильтруется.
Ну, во всех эффект случается, что также "2-й раунд", о котором я упоминал, остается пустым при повторной настройке add_filter перед do_shortcode; в противном случае он отображается (но, как я уже сказал, нефильтрованный).
Я также пытался отследить его с помощью
echo has_filter('post_gallery');
echo current_filter();
И я обнаружил, что имеет возвращается всегда 1, в то время как текущий первые возвраты ' пост-галерея' как и ожидалось, а затем он перезаписывается крючок '*wp_ajax_nopriv_etc*', который необходим для обработки запросов с помощью admin-ajax.php но на самом деле это действие и не фильтр . (?!?)
Я также безуспешно пытался взломать плагин cleaner gallery, чтобы заставить его напрямую запускать шорткод без фильтрации функции по умолчанию, удалил исходный шорткод и добавил этот новый. Это работает как шарм для обычных сообщений, но, похоже, нет никакого способа реализуйте плагин в ajax-запросах.
Я все больше и больше запутываюсь. Пожалуйста, помогите мне!
(также опубликовано на WP.org форумы)
3 answers
Когда WordPress отображает содержимое публикации, он не работает do_shortcode()
с содержимым публикации, он работает apply_filters( 'the_content', $content )
. Фильтры шорткодов применяются к фильтру the_content
, поэтому вам нужно добавить дополнительные фильтры, чтобы заставить их работать в виджетах, нижнем колонтитуле или где-либо еще.
Не знаю, работали ли вы над решением, но у меня была похожая проблема, и я решил ее:
- отсоединение исходной функции галереи от шорткода галереи
-
Привязка моей собственной функции галереи к исходному шорткоду галереи (вместо создания нового шорткода для пользовательской функции галереи)
//unbinds WordPress function in order to replace it with new code remove_shortcode('gallery', 'gallery_shortcode'); //binds own custom gallery code function add_shortcode('gallery', 'acmecustomgallery_shortcode');
Более подробная информация здесь.
Ой-ой-ой... в admin-ajax.php:
define('WP_ADMIN', true);
В cleaner-gallery.php:
function cleaner_gallery_setup() {
if ( is_admin() ) {
require_once( CLEANER_GALLERY_DIR . 'admin.php' );
} else {
require_once( CLEANER_GALLERY_DIR . 'gallery.php' );
}
}
Поэтому мне приходится вручную включать и запускать необходимый код плагина, пропущенный после проверки константы WP_ADMIN, но я думаю, что потребность в интерфейсном обработчике ajax становится все более актуальной!