За последние 24 часа нас посетили 21474 программиста и 1015 роботов. Сейчас ищут 713 программистов ...

Загрузка стилей плагина по требованию

Тема в разделе "Wordpress", создана пользователем Nerfed, 24 сен 2021.

  1. Nerfed

    Nerfed Активный пользователь

    С нами с:
    21 июл 2017
    Сообщения:
    186
    Симпатии:
    12
    Я тут накатал несколько плагинов для своего сайта. Пытаюсь сделать так, чтобы стили и скрипты для этих плагинов загружались на фронт-энде только если плагин используется на странице. Я удивлён, что такой системы нет в Wordpress из коробки, так что она скорее всего есть, просто это я слепой. Подскажите как это правильно реализовать?

    Пока что я накатал какой-то дикий быдло-код. Наверняка, это можно сделать проще.
    PHP:
    1. function get_page_raw_content() {
    2.     if (is_singular()) {
    3.         global $wp_query;
    4.         $post_id = $wp_query->get_queried_object_id();
    5.         $mypost = get_post($post_id);
    6.      
    7.         if (has_shortcode( $mypost->post_content,'el_tables')) {
    8.                 el_tables_scripts();
    9.         }
    10.     }
    11. }
    12. add_action('wp_enqueue_scripts', 'get_page_raw_content');
     
  2. Nerfed

    Nerfed Активный пользователь

    С нами с:
    21 июл 2017
    Сообщения:
    186
    Симпатии:
    12
    Пояснялочка. Самое очевидное решение это подрубать скрипты и стили в самой функции шордкода.
    PHP:
    1. function el_tables($data) {
    2.      el_tables_scripts();
    3. }
    4. add_shortcode('el_tables', 'el_tables');
    Но я так никогда делаю потому что эта функция стреляет уже когда <head> вывелся на страницу. В итоге внутри этой функции мы не можем запустить add_action('wp_enqueue_scripts', 'el_tables_scripts'), а стили со скриптами падают в конец <body>, что приводит к "дрыганью стилей" в момент прогрузки страницы. Поэтому, я искал способ привязаться к хуку wp_enqueue_scripts, чтобы вывести всё в <head>. Когда стреляет этот хук, то у нас пока нет содержимого страницы и мы не можем проверить, используется ли на ней шордкод (вордпресс писали конченные люди). Поэтому, я сам вытаскиваю содержимое, проверяю есть ли там шордкод, и если есть, то подключаю стили в <head>.
     
    #2 Nerfed, 24 сен 2021
    Последнее редактирование: 24 сен 2021
  3. Nerfed

    Nerfed Активный пользователь

    С нами с:
    21 июл 2017
    Сообщения:
    186
    Симпатии:
    12
    Ага, в вордпрессе всё-таки нет такого механизма... Единственную нормальную инфу по этому вопросу написал этот человек. Остальные либо дропают свои стили в конец <body>, что вообще не валидно, либо пишут такой же быдло-код как у меня, с проверкой содержимого страницы на наличие шордкода. При этом они по-моему даже не вдупляют, что этот код у них выполняется несколько раз перед первым хуком (для каждого плагина).

    Короче... Вордпресс - говно. Буду пробовать написать плагин, который делает отложенный вывод, чтобы содержимое страницы не выплёвывалось сразу, а собиралось в переменную, с которой можно работать. Если это окажется невозможным, не натоптав в коде самой CMS немытыми ногами, то есть план Б - плагин, который всегда загружается первым, вытаскивает содержимое страницы единожды и пишет его в константу. Дальше во всех моих плагинах можно будет делать проверку есть ли в этой константе шордкод, и если есть - подключать стили.