Entcasting eines Plugins, das einen iFrame zur Verarbeitung von Daten in admin verwendet

Ich arbeite an einem Plugin, um Inhalte aus einer database in WordPress zu importieren. Was ich versuche zu tun ist, die Verarbeitung in einem iframe zu machen, so dass die Ausgabe dem Benutzer wie der Plugins Updater angezeigt wird.

Lassen Sie mich meinen Workflow erklären, um meine Bedürfnisse besser zu verstehen.

  • Ich präsentiere zuerst eine Einstellungsseite, um eine Verbindung zu einer externen database herzustellen.
  • Ich zeige dann eine Bestätigungsseite mit den Verbindungsdetails. Wenn die Verbindung erfolgreich war, gebe ich ihnen Optionen, um auszuwählen, was importiert und wo es zugeordnet werden soll.

So weit, so gut, alles funktioniert wie erwartet.

  • Als nächstes möchte ich, dass sie auf Import klicken und der Importvorgang wird durch einen iFrame abgeschlossen, der die Daten ausgibt, während sie verarbeitet werden.

Ich habe derzeit diesen letzten Teil funktioniert, aber ich habe einige Probleme. Erstens gibt es Daten nur aus, wenn es abgeschlossen ist, nicht während des processes. Zweitens kann ich keine WordPress-Hooks verwenden, um das Plugin zu ändern, da es spezielle Anforderungen gibt. Dies ist, wo ich in Schwierigkeiten gerate. Ich rufe den iFrame direkt in meiner Plugin-Vorlagendatei an.

Plugin-Code:

add_action('mypluginimporter_import_iframe', array($this, 'displayImportIframe')); function displayImportIframe() { // Display whatever it is you want to show echo 'Browser does not support iframes.'; } 

Dies ist die Ansichtsdatei:

 

Die _processImport.php Datei ist:

 // Loads the WordPress Environment $tmpRootPath = dirname(dirname(dirname(dirname( __FILE__ )))); if (file_exists($tmpRootPath . '/wp-blog-header.php')) { require_once( $tmpRootPath . '/wp-blog-header.php' ); } else { require_once( $tmpRootPath . '/wordpress/wp-blog-header.php' ); } if (isset($_GET['_wpnonce']) && check_admin_referer( 'mypluginimporter_import_iframe')) { define( 'IFRAME_REQUEST', true ); session_start(); // Load the plugin require_once( dirname(__FILE__).'/MyPluginImporter.php' ); MyPluginImporter::process(); } else { die( _e('Invalid request') ); } 

Jetzt weiß ich, dass dies nicht der richtige Weg ist. Ich versuche, die beste Methode dafür in WordPress zu finden. Ich möchte auch in der Lage sein, Hooks zu verwenden und andere Plugins in mein Plugin einzubinden. Ich habe versucht, den plugins_loaded Hook zu verwenden, aber das schien überhaupt nichts zu tun.

Wenn mehr Code oder Informationen benötigt werden, werde ich so viel wie möglich zur Verfügung stellen.

Solutions Collecting From Web of "Entcasting eines Plugins, das einen iFrame zur Verarbeitung von Daten in admin verwendet"

Sie können admin-post.php auf die Verarbeitung über den admin_post_$youraction Hook admin_post_$youraction :

Mit diesem Hook können Sie benutzerdefinierte Handler für Ihre eigenen benutzerdefinierten GET- und POST-Anforderungen erstellen. Der admin_post_-Hook folgt dem Format “admin_post_ $ youraction”, wobei $ youraction der Parameter ‘action’ der GET- oder POST-Anfrage ist.

Sie können die URL über admin_url( 'admin-post.php?action=add_foobar' ) . Dann haken Sie Ihren Code:

 add_action( 'admin_post_add_foobar', 'prefix_admin_add_foobar' ); function prefix_admin_add_foobar() { // Handle request then generate response using echo or leaving PHP and using HTML } 

Wenn Sie die Dinge auf den neuesten Stand bringen wollen, dann ist wahrscheinlich AJAX , was ähnlich wie oben beschrieben funktioniert, mit einem Aktionsparameter, der einem Aktionshaken zugeordnet ist.