Intereting Posts
Должны ли использовать виджеты в этом случае? Какие области для тестирования модуля при построении плагина? Обновление метаданных с помощью save_post в многопользовательском режиме Получите post_id, где meta_value равно чем-то в сериализованном поле meta_value Как использовать предыдущую / следующую ссылку изображения, игнорируя родительские сообщения / вложения? Добавить класс в текущую должность в query_post Показать все мета для публикации? Выполните функцию, когда отображается вся страница Open Media Uploader Link в одном сообщении или на странице Переадресация wp_login_form разработка плагинов: проблема с функциями используя несколько запросов с одним $ wpdb Несколько шаблонов для пользовательских типов сообщений После завершения создания сайта на localhost, как мне передать все на сервер клиента? скопировать заголовок приложения в описание и текст alt

Я не могу получить доступ к функциям wordpress из вызова ajax php

Я видел несколько вопросов, подобных этому, но я не могу найти решение проблемы, которая у меня есть.

<?php add_action('wp_ajax_nopriv_LogHit_callback', 'LogHit_callback'); add_action('wp_ajax_LogHit_callback', 'LogHit_callback'); function HitCount() { ?> <script type="text/javascript" > jQuery(document).ready(function($) { var data = { action: 'LogHit_callback', PostId:'<?php echo get_the_ID() ?>' }; jQuery.post('http://www.test.com/wp-admin/admin-ajax.php', data); }); </script> <?php function LogHit_callback() { global $wpdb; // this is how you get access to the database $postId = $_POST['PostId']; $hits = get_post_meta((int)$postId, 'hit-counter', true); $hits = $hits + 1; update_post_meta((int)$postId, 'hit-counter', (int)$hits); exit; // this is required to return a proper result } 

Когда я вызываю функцию HitCount на своей странице, она отображает следующее

 <script type="text/javascript" > jQuery(document).ready(function($) { var data = { action: 'LogHit_callback', PostId:'86476' }; jQuery.post('http://www.test.com/wp-admin/admin-ajax.php', data); }); </script> 

Прямая ссылка на файл admin-ajax.php работает в браузере, но функция обратного вызова никогда не вызывается?

Solutions Collecting From Web of "Я не могу получить доступ к функциям wordpress из вызова ajax php"

Вы делаете новый запрос на сервер, и вы загружаете страницу, которая не загружает основные функции WordPress. Мне нужно будет увидеть ваш HitCount.php чтобы подтвердить это, но я не могу придумать другого объяснения.

Загрузка файлов WordPress по частям сложна и подвержена поломке при изменении основного кода. Возможно, вы можете заставить его работать, загружая wp-load.php , wp-settings.php или wp-blog-header.php . Я считаю, что последний является официально правильным, но он загрузит функции темы, которые вам, вероятно, не нужны. Я не знаю наверняка об этом, потому что я не использовал ни одного из этих трюков, так как API AJAX стал доступен, что привело меня к …

Самое безопасное, что нужно сделать, это использовать API AJAX , и это то, что я рекомендую, если вы действительно не знаете основные файлы WordPress и последовательность загрузки очень хорошо, а также должны очень быстро реагировать. API AJAX загружает много, поэтому он может быть медленным, хотя в личном опыте я никогда не замечал отставания, о которых стоит беспокоиться.

Два вопроса, которые я вижу в обновленном коде,

Действие, которое вы передаете в js, – LogHit , но действие, которое вы устанавливаете в add_actionLogHit_callback : wp_ajax_nopriv_LogHit_callback . один из них должен измениться, чтобы соответствовать другому.

Функция HitCount где это связано, чтобы добавить этот код на свою страницу? Кроме того, в этом блоке кода: jQuery.post(ajaxurl... , на переднем конце ajaxurl не будет определен. Если это будет непосредственно введено в страницу, вы должны установить это через admin_url( 'admin-ajax.php' ) Предпочтительный метод заключается в том, чтобы поместить это в свой собственный файл js, поставить в очередь его , затем использовать wp_localize_script для установки ajaxurl :

 wp_enqueue_script( 'my-ajax-request', plugin_dir_url( __FILE__ ) . 'js/your_script.js', array( 'jquery' ) ); wp_localize_script( 'my-ajax-request', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) ); 

Затем используйте MyAjax.ajaxurl в js:

 jQuery.post(MyAjax.ajaxurl, data, function(response) { 

Вам нужно загрузить весь материал wordPress, и в старые времена вам нужно было include "../../../wp-load.php" или что-то в этом роде.

Но теперь лучше всего использовать admin-ajax.php для обработки всех запросов ajax. И вам нужно понять крючки, чтобы сделать это, и я считаю, что вы это делаете 🙂

Я бы предложил прочитать эту статью http://www.garyc40.com/2010/03/5-tips-for-using-ajax-in-wordpress/#js-global для начинающих.