Почему этот 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? Документация была очень запутанной, если не сказать больше.

Когда вы загружаете 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' );