Я не мог найти простого решения для вызова шорткода php с помощью javascript.
У меня есть этот код javascript:
$(document).ready(function(){
$("button").click(function(){
$.ajax({
type: 'POST',
url: '../wp-content/themes/medical-cure/ads_script.php',
success: function(data) {
$("p").text(data);
}
});
});
});
Где ads_script.php содержит:
<?php
echo do_shortcode( '[wprevive_js zoneid = "10"]' );
?>
все выполняется, когда я нажимаю кнопку:
<button class = "button" type = "button" >Click Me</button>
Но все это дает мне ошибку 500. Может быть, мне нужно спросить wordpress stackexchange, потому что
do_shortcode( '[wprevive_js zoneid = "10"]' );
на самом деле код Worpdress, но я был бы признателен за любую помощь здесь.
ОБНОВИТЬ:
Если я попытаюсь поставить echo "hi"
вместо шорткода, он сработает, верните мне «HI», когда я запускаю вызов Ajax с помощью кнопки.
@PatrickQ нет ответа или какого-либо журнала, выдает ошибку сервера 500 в ads_script.php в консоли
Было бы очень маловероятно, если бы не было зарегистрированной ошибки где-то с ответом статуса 500. Куда ты смотришь?
@PatrickQ все, что я вижу, это с моей консоли, я не могу получить доступ к журналу сервера, поэтому в консоли я вижу 500error в jquery.min.js в строке 4 «send», «ajax». Нет лучшего объяснения этой ошибки :(
«Я не могу получить доступ к журналу сервера» Вам нужно выяснить, как получить доступ к своим журналам. Без него вам действительно не следует заниматься разработкой. Мы не сможем помочь вам, не зная фактического сообщения об ошибке. Как разработчик, ваши журналы - это, по сути, ваша первая строка отладки.
@PatrickQ Да, я попробую получить доступ, я работал только с javascript, поэтому ошибка всегда видна в консоли. вот почему :) php выдает ошибку на стороне сервера, поэтому я не вижу полной ошибки в консоли, возможно
@PatrickQ в журнале есть: mod_fcgid: stderr: PHP Fatal error: Uncaught Error: Call to undefined function do_shortcode() in /mnt/vhosts/my-wesbite.com/dev/wp-content/themes/medical-cure/ads_script.php:4, referer: https://my-wesbite.com/test/
и 500 POST /wp-content/themes/medical-cure/ads_script.php HTTP/1.0
- все, что я вижу из журнала ...
"undefined function do_shortcode ()" Вот ваша ошибка. Я предполагаю, что запрос на самом деле не проходит через WP. Таким образом, вам, вероятно, потребуется либо сделать запрос через маршрут WP (вместо явного вызова этого файла напрямую), либо выяснить, как включить ядро WP на эту страницу. Я не могу сказать вам, как это сделать, потому что я терпеть не могу WP. Надеюсь, придет еще кто-нибудь, кто сможет вам помочь.
@PatrickQ спасибо за всех братан :)
Нужно ли включать какие-либо файлы перед вызовом шорткода do?
@unixmiah Ну да, потому что я вызываю функцию Ajax, которая вызывает внешний файл php
В WordPress есть структура для вызова AJAX - codex.wordpress.org/AJAX_in_Plugins. Он загрузит WordPress, который является причиной вашей проблемы. echo () работает, поскольку не требует WordPress. do_shortcode () требует WordPress и не может работать, если WordPress не загружен.
Вам не обязательно использовать фреймворк, но если вы этого не сделаете, вы обязаны загрузить WordPress, потребовав wp-load.php.
Вы изолировали свой файл ads_script.php от ядра WordPress.
Поскольку вы вызываете его напрямую, он не загружает WordPress и выдает do_shortcode, а не ошибку функции.
Попробуйте загрузить wp_load.php в свой файл ads_script.php.
Это будет выглядеть примерно так:
<?php
// instead of include '../../../wp-load.php'; do ...
$parse_uri = explode( 'wp-content', $_SERVER['SCRIPT_FILENAME'] );
require_once( $parse_uri[0] . 'wp-load.php' );
echo do_shortcode( '[wprevive_js zoneid = "10"]' );
?>
да, именно моя мысль
это сработало, братан! огромное спасибо! Только вместо .text(data)
я поставил .html(data)
, чтобы шорткод корректно отображался.
первый человек, который решил эту проблему после нескольких дней попыток. Еще раз спасибо.
"дай мне ошибку 500". Проверьте свои журналы ошибок, чтобы найти конкретную ошибку и включить ее выше.