Позвоните шорткоду 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.

Ты можешь видеть результат здесь

4

Решение

Когда вы вызываете файл 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.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]