Запустите do_shortcode в PHP-шаблоне, используя JS-функцию

Вопрос или проблема

Я хочу запустить шорткод, используя [jobs] в моем PHP шаблоне. Я использую плагин WP Job Manager. Пример кода:

<?php
    global $post;
    $company_name = esc_attr(urldecode(get_query_var(apply_filters('wp_job_manager_companies_company_slug', 'company'))));
?>
    <a href="#" onclick="test(); return false;"> test </a>
    <span id="php_code"> </span>

    <script type="text/javascript">
    function test(){
       phpTest = "<?php echo "json_encode(do_shortcode(\'\[jobs post_status="publish" keywords="" .$company_name. ""\]'));"; ?>";
       document.getElementById("php_code").innerHTML = phpTest;
    }
    </script>

Это выводит реальный текст, но я хочу, чтобы функция do_shortcode() WordPress действительно отработала и вывела все, что делает шорткод [jobs]. Использование <?php echo do_shortcode(params); ?> в шаблоне фактически работает. Я создаю пользовательскую функцию, используя радиокнопки.

Ссылка на код, который я нашел в интернете: https://www.daniweb.com/programming/web-development/threads/312161/php-innerhtml-and-blank-spaces

Простой поиск в Google привел меня к этому: Нельзя запускать PHP с JavaScript. JavaScript – технология на стороне клиента (выполняется в браузере пользователя), а PHP – технология на стороне сервера (выполняется на сервере). Если вы хотите это сделать, вам нужно сделать AJAX-запрос к PHP-скрипту и получить те результаты, которые вы ищете.

Ответ или решение

Для выполнения шорткода [jobs] внутри шаблона PHP с использованием функции JavaScript, необходимо учесть, что PHP и JavaScript работают на разных уровнях: PHP является серверной технологией, в то время как JavaScript выполняется на стороне клиента. Это означает, что вы не можете непосредственно выполнять PHP-код из JavaScript. Однако существует решение вашей задачи с помощью технологии AJAX.

Шаги для выполнения задачи:

  1. Создание AJAX-обработчика в WordPress:
    Создайте обработчик AJAX в вашем файле functions.php. Этот обработчик будет выполнять шорткод и возвращать сгенерированный HTML-код.

    function my_ajax_handler() {
       // Проверка nonce для безопасности AJAX запроса
       check_ajax_referer('my_nonce', 'nonce');
    
       $company_name = esc_attr(urldecode(get_query_var(apply_filters('wp_job_manager_companies_company_slug', 'company'))));
       $shortcode_output = do_shortcode('[jobs post_status="publish" keywords="' . $company_name . '"]');
    
       echo json_encode(array('output' => $shortcode_output));
       wp_die(); // Обязательный вызов для завершения AJAX запроса
    }
    add_action('wp_ajax_my_action', 'my_ajax_handler');
    add_action('wp_ajax_nopriv_my_action', 'my_ajax_handler'); // Для незалогиненных пользователей
  2. Вызов AJAX из JavaScript:
    Теперь необходимо написать JavaScript-код для отправки AJAX-запроса на сервер и получения результата. Этот код должен быть встроен в вашу страницу.

    function test() {
       var xhr = new XMLHttpRequest();
       xhr.open('POST', '<?php echo admin_url('admin-ajax.php'); ?>', true);
       xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    
       xhr.onreadystatechange = function () {
           if (xhr.readyState === 4 && xhr.status === 200) {
               var response = JSON.parse(xhr.responseText);
               document.getElementById("php_code").innerHTML = response.output;
           }
       };
    
       xhr.send('action=my_action&nonce=<?php echo wp_create_nonce('my_nonce'); ?>');
    }

Важные аспекты:

  • Безопасность: Использование wp_create_nonce и проверка check_ajax_referer обеспечивает безопасность вашего AJAX-запроса, защищая его от CSRF атак.
  • SEO-оптимизация: Хотя данная функция не влияет напрямую на SEO, важно, чтобы загрузка динамических компонентов страницы не задерживала основную загрузку контента. Подумайте об оптимизации скорости загрузки сайта.
  • Пользовательский опыт: Обратите внимание на обработку ошибок AJAX-запроса и предоставление пользователю информации о возможных сбоях или задержках в загрузке информации.

Следуя вышеописанной процедуре, вы сможете успешно выполнить шорткод [jobs] внутри шаблона PHP при помощи JavaScript, используя технологии WordPress и AJAX.

Оцените материал
Добавить комментарий

Капча загружается...