Intereting Posts
Бытие / пользовательская страница шаблона / настройка заголовка страницы и метафайла Cant view wordpress после установки Yoast SEO Вызов фильтров контента 2 раза Измените пользователя с роли, которая позволяет создавать сообщения Прекратить сохранение процесса, когда метабокс недействителен можно ли изменить значение версии плагина wordpress, чтобы избежать предупреждения об обновлении? Теги шаблона, не работающие в предварительном просмотре Как перемещать изображения Как разместить меню в левой части страницы в WordPress 3.5 Loop.php против цикла внутри файла шаблона wp_upload_bits не извлекает изображения, у которых нет расширения Измените параметр «Изменить профиль», но все еще можно просмотреть профиль Адрес веб-сайта Переадресация на веб-сайт после попытки миграции Используйте мета-окно для создания динамического выпадающего списка Лучшая практика для PHP

Интеграция jQuery Datatables с редактором в wordpress admin

Я пытаюсь интегрировать JQuery Datables в свой плагин WordPress http://editor.datatables.net/

Я создал таблицу базы данных

CREATE TABLE `id` ( `id` int(10) NOT NULL auto_increment, `first` varchar(255) default NULL, `last` varchar(255) default NULL, `age` varchar(255) default NULL, PRIMARY KEY (`id`) ); 

Я выделил требуемые файлы

  $this->enqueueStyle( dirname( APFDEMO_FILE ) . '/datatables/css/demo.css', 'apf_first_page' // page slug ); $this->enqueueStyle( dirname( APFDEMO_FILE ) . '/datatables/css/jquery.dataTables.css', 'apf_first_page' // page slug ); $this->enqueueStyle( dirname( APFDEMO_FILE ) . '/datatables/css/dataTables.tableTools.css', 'apf_first_page' // page slug ); $this->enqueueStyle( dirname( APFDEMO_FILE ) . '/datatables/css/dataTables.editor.css', 'apf_first_page' // page slug ); $this->enqueueScript( dirname( APFDEMO_FILE ) . '/datatables/js/jquery.dataTables.min.js', // source url or path 'apf_first_page', // page slug '', // tab slug array( 'handle_id' => 'my_dataTables_script', // this handle ID also is used as the object name for the translation array below. ) ); $this->enqueueScript( dirname( APFDEMO_FILE ) . '/datatables/js/dataTables.tableTools.min.js', // source url or path 'apf_first_page', // page slug '', // tab slug array( 'handle_id' => 'my_dataTablesTool_script', // this handle ID also is used as the object name for the translation array below. ) ); $this->enqueueScript( dirname( APFDEMO_FILE ) . '/datatables/js/dataTables.editor.js', // source url or path 'apf_first_page', // page slug '', // tab slug array( 'handle_id' => 'my_dataTableseditor_script', // this handle ID also is used as the object name for the translation array below. ) ); 

Я объявил данные datatables и html для таблицы

  $(document).ready(function() { var editor = new $.fn.dataTable.Editor( { "ajax": "admin-ajax.php?action=datatables", "table": "#id", "fields": [ { "label": "first", "name": "first", "type": "text" }, { "label": "last", "name": "last", "type": "text" }, { "label": "age", "name": "age", "type": "text" } ] } ); $('#id').dataTable( { "dom": "Tfrtip", "ajax": "admin-ajax.php?action=datatables", "columns": [ { "data": "first" }, { "data": "last" }, { "data": "age" } ], "tableTools": { "sRowSelect": "os", "aButtons": [ { "sExtends": "editor_create", "editor": editor }, { "sExtends": "editor_edit", "editor": editor }, { "sExtends": "editor_remove", "editor": editor } ] } } ); } ); <div class="container"> <h1>DataTables Editor - id</h1> <table cellpadding="0" cellspacing="0" border="0" class="display" id="id" width="100%"> <thead> <tr> <th>first</th> <th>last</th> <th>age</th> </tr> </thead> </table> </div> 

Объявлены функции ajax

 add_action( 'wp_ajax_datatables', 'my_datatables_callback' ); function my_datatables_callback() { include( APFDEMO_DIRNAME . '/datatables/php/table.id.php' ); die(); } 

Я могу заставить таблицы правильно загружать на страницу плагина, но когда я пытаюсь отредактировать / создать / обновить, он ничего не делает.

У кого-нибудь есть опыт интеграции datatables в плагин wordpress.

Я думаю, что главная проблема заключается в

 var editor = new $.fn.dataTable.Editor( { "ajax": "admin-ajax.php?action=datatables", 

было бы действительно полезно

Благодарю.

Solutions Collecting From Web of "Интеграция jQuery Datatables с редактором в wordpress admin"

Оба редактора DataTables и WordPress пытаются использовать один и тот же зарезервированный параметр «действие».

WordPress использует $ _REQUEST ['action'] для маршрутизации запроса в строке admin-ajax.php 86.

Редактор DataTables использует $ _POST ['action'], чтобы сообщить сценарию обработки на стороне сервера, какое действие необходимо применить (вставить / удалить / обновить – см. https://editor.datatables.net/manual/server )

Это будет работать нормально, если $ _REQUEST ['action'] был установлен в 'datatables'. Однако WordPress заставляет $ _REQUEST быть GET + POST на линии 598 wp-includes / load.php

 function wp_magic_quotes() { // If already slashed, strip. if ( get_magic_quotes_gpc() ) { $_GET = stripslashes_deep( $_GET ); $_POST = stripslashes_deep( $_POST ); $_COOKIE = stripslashes_deep( $_COOKIE ); } // Escape with wpdb. $_GET = add_magic_quotes( $_GET ); $_POST = add_magic_quotes( $_POST ); $_COOKIE = add_magic_quotes( $_COOKIE ); $_SERVER = add_magic_quotes( $_SERVER ); // Force REQUEST to be GET + POST. $_REQUEST = array_merge( $_GET, $_POST ); } 

Таким образом, ваша функция обратного вызова ajax никогда не вызывается.

Что вам нужно сделать, это добавить следующее:

 add_action('admin_init', 'fix_request_action'); function fix_request_action() { global $pagenow; if($pagenow == 'admin-ajax.php' && isset($_GET['action']) && isset($_POST['action'])) { $_REQUEST['action'] = $_GET['action']; } } 

Это обнаружит ситуацию, когда $ _GET ['action'] и $ _POST ['action'] устанавливаются, когда текущая страница является admin-ajax.php. Это заставит $ _REQUEST ['action'] быть правильным действием (в вашем случае «datatables» – действие $ _GET), чтобы ваш обратный вызов был вызван правильно.

Надеюсь, это поможет.

Вам не нужна функция: fix_request_action

просто установите javascript так:

 $('#id').dataTable({ "ajax": { url: "admin-ajax.php", "data": function ( d ) { d.action = "json_basic_list"; } } }); 

работает с удовольствием и соответствует ссылке wordpress на https://codex.wordpress.org/AJAX_in_Plugins