Intereting Posts
Вставка текущего идентификатора пользователя в сообщение для автора Как удалить размеры эскизов для определенного типа сообщения в дочерней теме? Как настроить пользовательские файлы cookie перед выходом Переопределяет файлы плагинов на темы WordPress Создайте цикл, который получает страницы со своим шаблоном Должен ли я использовать API файловой системы для чтения файлов или каталогов каталогов? <? php echo get_template_directory_uri (); ?> / images / image.jpg не работает в боковой панели Использование журнала отладки в производстве – это проблема безопасности? Ограничение по дате / времени сообщений, где должна выполняться функция Почему hook_post не работает? Как проверить, есть ли сообщение в категориях x, y, z inludint, их подкатегории Некоторые сообщения из настраиваемого типа сообщений в поддомены Как предотвратить использование персонализированного типа сообщений с использованием шаблона archive.php? add_rewrite_endpoint () и Custom Post Type Archive Скрыть переполнение по определенному шаблону WordPress

Почему этот Ajax не работает?

Я не уверен, что я злоупотребляю WordPress и Ajax, делая это таким образом, но WP и Ajax Codex, а также разработка плагинов с Ajax , похоже, не очень полезны. Я создал следующую ситуацию Ajax:

(function($){ $(document).ready(function(){ $('a').click(function(e){ var el = $(this).prev('input[type="checkbox"]'); if(el.is(':checked')){ el.prop('checked',false); } $.ajax({ url : "<?php echo CORETHEME_ADMIN_TEMPLATE_HELPER_URL . 'UncheckPackageThemeHelper.php'; ?>", type : 'POST', data : { 'element_name' : el.prop('name') }, success: function(result){ console.log(result); }, error: function(jqXHR, textStatus, errorThrown ){ console.log(jqXHR, textStatus, errorThrown); } }); e.preventDefault(); }); }); })(jQuery); 

В котором указано, что: при нажатии ссылки мы сняли флажок и передавали это имя элемента классу.

Все работает, пока вы не увидите метод unset_package в моем классе

 class CoreTheme_AdminPanel_Template_Helper_UncheckPackageThemeHelper{ private $_element_name = null; public function __construct(){ if(isset($_POST["element_name"])){ $this->_element_name = $_POST["element_name"]; $this->unset_package(); } } public function unset_package(){ $option = get_option($this->_element_name); if(isset($option)){ $option = ''; } } } new CoreTheme_AdminPanel_Template_Helper_UncheckPackageThemeHelper(); 

Все работает до get_option – я получаю 500 ошибок. что метод get_option () не существует – в этом случае. Я думаю, что если я get_option и остальную часть и заменим содержимое unset_package

с echo json_encode($this->_element_name); все работает, и я возвращаю имя элемента.

Может кто-нибудь объяснить, почему это не работает и, может быть, показать мне правильный способ WordPress? Документация была очень запутанной, если не сказать больше.

Solutions Collecting From Web of "Почему этот Ajax не работает?"

Когда вы загружаете php-файл напрямую через запрос ajax ( UncheckPackageThemeHelper.php ), он загружается вне контекста WordPress, поэтому никаких основных функций WordPress нет.

Все запросы ajax для WordPress должны направляться через admin-ajax.php . Вы можете распечатать URL-адрес с помощью функции admin_url :

 admin_url( 'admin-ajax.php' ) 

Когда admin-ajax.php загружен, WordPress загружается, поэтому теперь у вас будет доступ к основным функциям.

Последний шаг – передать параметр action из вашего javascript и сопоставить это действие с функцией, которую вы хотите вызвать, когда действие выполнено:

 add_action( 'wp_ajax_my_action', 'my_action_callback' );