Функция обратного вызова WordPress Ajax из плагина — ООП

С помощью PluginBoilerplate написать плагин.
Мне нужно сделать вызов Ajax.

Я добавил на главную plugin.php файл, класс для регистрации скриптов и обработки вызовов ajax.

if ( ! class_exists( 'PoorMansNameSpaceAJAX' ) ) {

class PoorMansNameSpaceAJAX{
public static $instance = null;
public $nonce = '';
public $name = 'ajaxexample';
public static function getInstance()
{
null === self::$instance AND self::$instance = new self;
return self::$instance;
}
public function __construct(){
# Could as well be: wp_enqueue_scripts or login_enqueue_scripts
add_action( 'admin_enqueue_scripts', array( $this, 'scriptsEnqueue' ) );
# Logged in users:
add_action( 'wp_loaded', array( $this, 'scriptsRegister' ) );
add_action( 'admin_enqueue_scripts', array( $this, 'scriptsLocalize' ) );
add_action( 'admin_init', array( $this, 'ajaxRegister' ) );}
public function scriptsRegister( $page ){
$file = 'page-1.js';
wp_register_script(
$this->name ,
WPBP_URLPATH . '/app/files/js/' . $file ,
array('jquery')
);
}
public function scriptsEnqueue( $page ){

wp_enqueue_script( $this->name );
}

public function ajaxRegister() {
add_action( "wp_ajax_{$this->name}_action",  array($this, 'ajaxexample'), '1' );
}

public function scriptsLocalize( $page ){
wp_localize_script( $this->name, "{$this->name}Object", array(
'ajaxurl'          => admin_url( 'admin-ajax.php' ),
'action'           => "{$this->name}_action") );
}

public function ajaxexample(){
ob_clean();

echo json_encode( array(
'success' => true
) );
wp_die();
}
}
}

класс вызывается после включения vendor / autoload.php.

главная проблема в том, что хотя скрипт успешно зарегистрирован, поставлен в очередь и локализован, функция обратного вызова ajax не предпринимает никаких действий.

вызов ajax возвращает пустой ответ.

( function( $, plugin ) {
$(document).ready( function() {

$('#moreroles').on('click', function(event) {
event.preventDefault();
/* Act on the event */
var data = plugin;
$.ajax({
url: plugin.ajax_url,
data: data,
beforeSend : function( d ) {
console.log( 'Before send', d );
}
})
.done( function( response, textStatus, jqXHR ) {
console.log( 'AJAX done', textStatus, jqXHR, jqXHR.getAllResponseHeaders() );
} )
.fail( function( jqXHR, textStatus, errorThrown ) {
console.log( 'AJAX failed', jqXHR.getAllResponseHeaders(), textStatus, errorThrown );
} )
.then( function( jqXHR, textStatus, errorThrown ) {
console.log( 'AJAX after finished', jqXHR, textStatus, errorThrown );
} );

});
} );
} )( jQuery, ajaxexampleObject || {});

0

Решение

PluginBoilerplate отсутствует правильный процесс обработки для этого вида использования.
Это ООП WP плагин Boilerplate делает это намного лучше, и предоставляет классы загрузчика для администратора и клиента.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector