Ajax-вызов возвращает 0, когда add_action находится внутри класса в functions.php

Ajax-вызов возвращает 0 в качестве вывода. Я уверен, что этот крючок не работает, и он не вызывает метод test2 . Почему add_action(... не работает внутри класса в functions.php ?

——– Wrap inside functions.php Запускает ——-

 class test{ public function __construct() { add_action( 'wp_ajax_test2', array( $this, 'test2' ) ); } public function test1() { ?> <script> jQuery(document).ready(function($){ var ajaxurl = "<?php echo get_site_url();?>/wp-admin/admin-ajax.php"; var data = {'action':'test2'}; $.ajax({ url: ajaxurl, type: "POST", data: data, success: function(val) { alert(val); }, }); }); </script><?php } public function test2(){ echo "success"; exit; } } 

——– Завершение внутри functions.php Заканчивается ——-

Создал объект на странице шаблона и вызвал метод test1:

 $ob_call = new test; $ob_call->test1(); 

Хотя я не уверен, почему вы хотите это сделать, пожалуйста, найдите ниже рабочий код. Пожалуйста, обратите внимание на комментарии в строке. Надеюсь, это поможет.

 class test{ public function __construct() { add_action( 'wp_ajax_test2', array( $this, 'test2' ) ); /* Front end ajax needs this. */ add_action( 'wp_ajax_nopriv_test2', array( $this, 'test2' ) ); add_action( 'wp_enqueue_scripts', array( $this, 'test1' ) ); } public function test1() { /* in JavaScript, object properties are accessed as ajax_object.ajax_url, ajax_object.we_value */ wp_localize_script('test-script-ajax', 'ajaxobj', array('ajaxurl' => admin_url('admin-ajax.php'))); /* Moved your js to a separate js file and enquing it the WordPress way */ wp_enqueue_script( 'test-script-ajax', get_stylesheet_directory_uri() . '/js/test-ajax.js', array( 'jquery' )); } public function test2(){ echo "success"; exit; } } $ob_call = new test; $ob_call->test1(); 

Вот код в файле test-ajax.js

 jQuery(document).ready(function($){ var data = { 'action':'test2' }; jQuery.post( ajaxobj.ajaxurl, data, function( response ) { alert(response); }); }); 

Сейчас он работает

———- Function.php —————

add_action ('wp_ajax_test2', array ('test', 'test2'));

class test {

 public function __construct() { } public function test1() { ?> <script> jQuery(document).ready(function($){ var ajaxurl = "<?php echo get_site_url();?>/wp-admin/admin-ajax.php"; var data = {'action':'test2'}; $.ajax({ url: ajaxurl, type: "POST", data: data, success: function(val) { alert(val); }, }); }); </script><?php } public function test2(){ echo "success"; exit; } 

}


—————— страница ( шаблон ) ————-

$ ob_call = новый тест;

$ Ob_call-> test1 ();

Взгляните на https://wordpress.stackexchange.com/questions/203383/why-hooking-differs-in-plugin-and-function-php-wordpress