Вызовите шорткод 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.

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

Author: Kéryh, 2014-09-27

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 функция.

 2
Author: Radley Sustaire, 2014-09-26 23:09:18