Intereting Posts

Почему этот 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' );