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 форумы)

Author: 3dolab, 2011-06-29

3 answers

Когда WordPress отображает содержимое публикации, он не работает do_shortcode() с содержимым публикации, он работает apply_filters( 'the_content', $content ). Фильтры шорткодов применяются к фильтру the_content, поэтому вам нужно добавить дополнительные фильтры, чтобы заставить их работать в виджетах, нижнем колонтитуле или где-либо еще.

 2
Author: EAMann, 2011-06-29 14:41:29

Не знаю, работали ли вы над решением, но у меня была похожая проблема, и я решил ее:

  • отсоединение исходной функции галереи от шорткода галереи
  • Привязка моей собственной функции галереи к исходному шорткоду галереи (вместо создания нового шорткода для пользовательской функции галереи)

    //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');
    

Более подробная информация здесь.

 1
Author: Celso Bessa, 2012-10-20 04:04:04

Ой-ой-ой... в 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 становится все более актуальной!

 0
Author: 3dolab, 2011-06-29 22:53:57