Вопрос или проблема
Я хочу запустить шорткод, используя [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.
Шаги для выполнения задачи:
-
Создание 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'); // Для незалогиненных пользователей
-
Вызов 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.