JQuery Datatables mit Editor in WordPress Admin integrieren

Ich versuche jQuery Databases in mein WordPress-Plugin zu integrieren http://editor.datatables.net/

Ich habe eine databasetabelle erstellt

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`) ); 

Ich habe die erforderlichen Dateien in die Warteschlange gestellt

  $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. ) ); 

Ich habe die Databases und das HTML für die Tabelle deklariert

  $(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 } ] } } ); } ); 

DataTables Editor - id

first last age

Deklarierte die Ajax-functionen

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

Ich kann die Tabellen auf der Seite des Plugins richtig laden, aber wenn ich versuche, es zu bearbeiten / zu erstellen / zu aktualisieren, tut es nichts.

Hat jemand Erfahrung bei der Integration von Databases in WordPress-Plugin?

Ich denke, das Hauptproblem liegt bei

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

wäre wirklich hilfreich

Vielen Dank.

Solutions Collecting From Web of "JQuery Datatables mit Editor in WordPress Admin integrieren"

Sowohl der DataTables Editor als auch WordPress versuchen, den gleichen reservierten Parameter ‘Aktion’ zu verwenden.

WordPress benutzt $ _REQUEST [‘action’] um die Anfrage in der admin-ajax.php Zeile 86 zu routen.

Der DataTables-Editor verwendet $ _POST [‘action’], um dem serverseitigen Verarbeitungsskript mitzuteilen, welche Aktion angewendet werden soll (Einfügen / Löschen / Aktualisieren – siehe: https://editor.datatables.net/manual/server ).

Dies würde funktionieren, wenn $ _REQUEST [‘action’] auf ‘datatables’ gesetzt wäre. WordPress erzwingt jedoch $ _REQUEST in Zeile 598 von wp-includes / load.php als GET + POST

 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 ); } 

Daher wird Ihre Ajax-Callback-function niemals aufgerufen.

Was Sie tun müssen, ist Folgendes hinzufügen:

 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']; } } 

Dies wird die Situation erkennen, in der sowohl $ _GET [‘action’] als auch $ _POST [‘action’] gesetzt sind, wenn die aktuelle Seite admin-ajax.php ist. Dadurch wird $ _REQUEST [‘action’] zur korrekten Aktion (in Ihrem Fall ‘datatables’ – die $ _GET-Aktion), sodass Ihr Callback korrekt aufgerufen wird.

Ich hoffe das hilft.

Sie benötigen die function nicht: fix_request_action

stell das Javascript einfach so ein

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

funktioniert und behandelt die WordPress-Referenz unter https://codex.wordpress.org/AJAX_in_Plugins