Вызовите шорткод wordpress с помощью AJAX
Я хотел бы запускать короткие коды с помощью кнопки переключения. Если переключатель "ВКЛЮЧЕН", я вызываю короткий код, а если он "выключен", я вызываю другой.
В качестве теста я попытался вызвать шорткод при нажатии на одну ссылку с помощью AJAX, это дает мне следующее:
Файл"page-recherche.php ":
<a href="" id="clicklien">CLICK HERE</a>
<script>
$("#clicklien").click(function(e){
e.preventDefault();
$.ajax({
url: 'http://www.capitainebar.com/wp-content/themes/Capitaine-Bar/shortcode-recherche.php',
success: function (data) {
// this is executed when ajax call finished well
console.log('content of the executed page: ' + data);
$('body').append(data);
},
error: function (xhr, status, error) {
// executed if something went wrong during call
if (xhr.status > 0) alert('got error: ' + status); // status 0 - when load is interrupted
}
});
});
</script
Файл называется "shortcode-recherche.php ":
<?php echo do_shortcode( '[search-form id="1" showall="1"]' ); ?>
Результатом является ФАТАЛЬНАЯ ошибка. Как будто код был запущен в"shortcode-recherche.php "скорее, чем "page-recherche.php ".
Обратите внимание, что шорткод отлично работает, если я пишу его прямо на свою страницу, без вызова AJAX.
Вы можете увидеть результат здесь
1 answers
Когда вы вызываете PHP-файл напрямую, WordPress не участвует. Это означает, что такие функции, как do_shortcode()
, даже не существуют.
Вместо этого вам нужно запросить файл, который перехватывается WordPress (даже если обычно 404). Затем сообщите вашему плагину URL-адрес. Вы можете сделать это с помощью переменных запроса (легко) или переписать правила (сложно, красивее). Например:
Переменная запроса: example.org/?custom_shortcode=gallery
Правило перезаписи: example.org/custom_shortcode/gallery/
Какой бы вариант вы ни выбрали, вашему плагину необходимо чтобы быть в курсе, когда вы получаете доступ к этому URL-адресу и перехватываете его. Когда вы закончите, вам нужно выйти из скрипта, чтобы WordPress не пытался показать страницу 404.
Вот пример, который вы можете просто добавить в свой functions.php файл.
function shortcode_test() {
if ( !empty($_REQUEST['shortcode']) ) {
// Try and sanitize your shortcode to prevent possible exploits. Users typically can't call shortcodes directly.
$shortcode_name = esc_attr($_REQUEST['shortcode']);
// Wrap the shortcode in tags. You might also want to add arguments here.
$full_shortcode = sprintf('[%s]', $shortcode_name);
// Perform the shortcode
echo do_shortcode( $full_shortcode );
// Stop the script before WordPress tries to display a template file.
exit;
}
}
add_action('init', 'shortcode_test');
Вы можете проверить это, посетив свой сайт, добавив это в конце URL-адреса:
?shortcode=gallery
Здесь должен отображаться шорткод галереи, развернутый в виде HTML. Как только это заработает, просто привяжите его к существующему AJAX функция.