Поддержка Проблемы и решения do_shortcode vs шоркод в тело контента

  • Неожиданно обнаружил, что шоркод, работающий в теле контента некорректно работает при вставке его в шаблон (или в файл функций) через do_shortcode.
    В частности проблема обнаружилась с конкретным плагином и через гуглопереводчик описана его автору. Но это похоже не единственная проблема (вывод полей форм вроде и еще что-то тоже отличается) и вряд ли единичный случай.

    Отсюда возник вопрос — в чем отличие обработки шоркодов (контент vs do_shortcode) и где корень проблемы? В ВП или как-то неправильно написанном шоркоде? Мне кажется, что всё-таки в ВП где-то что-то не (/иначе) обрабатывается/подтягивается.

Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Речь про шорткоды с содержимым в несколько строчек? По идее да, будет разница. Потому что все, что выводится через the_content() проходит через wpautop() и она ломает верстку, если есть шорткод и внутри несколько абзацев текста (получаются незакрытые теги). В случае прямого использования do_shortcode() функция для разбивки на абзацы не используется.

    Потому что все, что выводится через the_content() проходит через wpautop() и она ломает верстку, если есть шорткод и внутри несколько абзацев текста (получаются незакрытые теги). В случае прямого использования do_shortcode() функция для разбивки на абзацы не используется.

    Ага, спс. значит the_content вносит своё..

    А что еще он «тянет», кроме wpautop? Судя по описанной проблеме с плагином — там ещё и наверное с аяксом что-то (с ним я совсем плохо дружу).

    Там много всего. Списка составленного нет похоже, поэтому если просто быстро пробежаться по исходникам видно вот такое:

    add_filter( 'the_content', 'wptexturize'                       );
    add_filter( 'the_content', 'convert_smilies'                   );
    add_filter( 'the_content', 'wpautop'                           );
    add_filter( 'the_content', 'shortcode_unautop'                 );
    add_filter( 'the_content', 'prepend_attachment'                );
    add_filter( 'the_content', 'wp_make_content_images_responsive' );
    
    add_filter( 'the_content', 'do_shortcode', 11 ); // AFTER wpautop()
    
    add_filter( 'the_content', array( $this, 'run_shortcode' ), 8 );
    
    add_filter( 'the_content', array( $this, 'autoembed' ), 8 );
    
    // Format WordPress
    foreach ( array( 'the_content', 'the_title', 'wp_title' ) as $filter )
    	add_filter( $filter, 'capital_P_dangit', 11 );

    Там много всего.

    Нда..

    Значит, что бы заставить работать шоркод через do_shortcode так же, как он работает при вставке в контент нужно применить все эти фильтры. (Ну мб не все, но надо смотреть какие).

    Но я не пойму как это сделать.
    По идее они ж и так применяются, что подтверждает ошибка
    Error in user-provided code item named "filters-the_content". (выдаёт этот полезный плагин).

    Так как же их «натравить» на do_shortcode?

    И ещё есть проблема с аяксом. Ошибка указывает на плагин («производитель» шоркода), но её ж нет, если вставлять шоркод в контент
    Значит теряется и что-то от аякса. Что/где/как решить?

    Ну или собственно главный вопрос — как заставить работать do_shortcode так же, как и при обработке шорткода в контенте?

    Так как же их «натравить» на do_shortcode?

    apply_filters( ‘the_content’, ‘[best_shortcode]’ );

    • Ответ изменён 3 года, 5 месяцев назад пользователем iTRON.
Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Тема «do_shortcode vs шоркод в тело контента» закрыта для новых ответов.