Как я могу вызвать шорткод плагина из функции с файлом темы functions.php? - PullRequest
0 голосов
/ 22 декабря 2018

Я использую плагин (Popup Builder) на своем сайте WordPress.Всякий раз, когда я создаю новое всплывающее окно с плагином, оно создает шорткод для этого всплывающего окна.Я хочу вызвать этот шорткод из файла темы functions.php.Но я не могу заставить его работать должным образом.

Шорткод работает только при соблюдении условий.И в этом примере это когда посетитель впервые заходит на сайт.Затем я проверяю наличие определенного файла cookie, и если этот файл cookie не существует, всплывающее окно запускается и вынуждает посетителя выбрать один вариант из списка параметров, а затем для файла cookie будет установлено правильное значение, как только они это сделают.

Однако я не могу найти решение, которое вообще запускает всплывающее окно.Я также получаю это уведомление: Примечание: do_shortcode_tag был вызван неправильно.Попытка разобрать шорткод без действительного обратного вызова:

function check_for_cookies() { 

    // Check if cookie is already set
    if(isset($_COOKIE['tln_valgt_fylke'])) {

        // Do this if cookie is set 
        $string .= 'Hi, and welcome back!' ; 

        return $string;

    } else { 

        // Do this if the cookie doesn't exist

            $shortcode = do_shortcode("[sg_popup id=163]");

            return $shortcode;
        }   

    } 
    add_action('init', 'check_for_cookies');

Что я делаю не так, и что, если это не очень хороший способ выполнить то, что я хочу, тогда что такое?

1 Ответ

0 голосов
/ 22 декабря 2018

Это всего лишь предположение

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

Фактическикажется вероятным, потому что:

do_shortcode_tag был вызван неправильно.Попытка разобрать шорткод без действительного обратного вызова

Это указывает на то, что шорткод был вызван, и для него не было никакого обратного вызова.Это не проблема с вашим кодом, скажем так.Но он говорит, что плагин еще не загрузил файл, содержащий обратный вызов.

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

Возможно, вам даже удастся избежать изменения приоритета крючка:

  add_action('init', 'check_for_cookies', 20); //default is 10

Таким образом, он срабатывает в конце init, но даже тогда онможет быть слишком раноЕдинственный реальный способ узнать это - посмотреть на код для плагина и выяснить, когда он регистрирует его «материал».Самый простой способ сделать это - добавить этот код в обратный вызов шорткода плагинов:

<code>try{
   throw new \Exception();
}catch(\Exception $e){
   die("<pre>{$e->getTraceAsString()}
");}

Это вызовет и затем перехватит исключение, а затем выведет трассировку стека.Это может точно показать вам, где шорткод настраивается. Вам нужно будет вызвать обратный вызов (очевидно), чтобы он работал. Вы также можете использовать print_r(debug_backtrace()), но намного труднее читать IMO.

PS В последнее время я много работал над WP, и у меня просто была проблема с синхронизацией действий ... смеется. Поэтому я и подумал об этом, я потратил последние 2 дня на рефакторинг кода.замена частей добавления / редактирования / профиля пользовательской системы как на передней, так и на задней части. Это своего рода плагин для пользователей. И есть много конкурирующих действий, связанных с этим, если вы понимаете, что я имею в виду ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...