2014-09-26 2 views
4

Я хотел бы запускать короткие коды с помощью кнопки переключателя. Если переключатель «ВКЛ», я вызываю короткий код, и если он «ВЫКЛ», я вызываю другой.Вызов короткого кода для Wordpress с помощью AJAX

В качестве теста я пытался вызова шорткод на клик по одной ссылке с AJAX, это дает мне это:

Файл «Страница-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"]'); ?> 

В результате получилась ошибка FATAL. Как будто код работал в «shortcode-recherche.php», а не «page-recherche.php».

Обратите внимание, что короткий код работает нормально, если я пишу его непосредственно на свою страницу без вызова AJAX.

Вы можете увидеть the result here

+0

Можете ли вы разместить сообщение об ошибке, которую вы получаете? – Dez

+0

Неустранимая ошибка: вызов функции undefined do_shortcode() в /homepages/1/d543902707/htdocs/wp-content/themes/Capitaine-Bar/shortcode-recherche.php в строке 1 –

ответ

2

При вызове PHP файл напрямую, WordPress не участвует. Это означает, что такие функции, как do_shortcode(), даже не существуют.

Вместо этого вам необходимо запросить файл, зараженный WordPress (даже если обычно 404). Затем сообщите плагину о URL-адресе. Вы можете сделать это с помощью переменных запроса (легко) или переписать правила (сложнее, красивее). Например: переменная

Запрос: example.org/?custom_shortcode=gallery

Rerwrite правило: 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.

+0

ОК, я наконец получил это ... Спасибо много для вашей помощи! –

+0

С '? Shortcode = search-form', он возвращает мне это' Warning: Illegal string offset 'id' в/homepages/1/d543902707/htdocs/wp-content/plugins/profi-search-filter/includes/shortcode. php в строке 4'. Как я могу указать идентификатор моего короткого кода в URL-адресе, который вы мне дали? –

+0

Привет, вы можете заглянуть в мою проблему: http://stackoverflow.com/questions/41248786/wordpress-execute-do-shortcode-inside-ajax-function –

Смежные вопросы