Versuchen, wp-load.php zu vermeiden

Ich arbeite ein Plugin, wo ich versuche, ein HR-System mit WordPress zu verbinden. Es gibt eine XML-API auf dem HR-System, also habe ich das Plugin geschrieben, um die Daten zu nehmen und sie in eine WordPress-databasetabelle zu stecken, die für mein Plugin spezifisch ist. Dies geschieht alles über den eingebauten AJAX usw., aber es gab eine Anfrage an die Person, eine Aufgabe so planen zu können, dass sie das HR-System nicht bei jedem Besuch vor Ort anfragte (die Liste der Positionen muss auf der Website angezeigt werden) Website-Titelseite). Dann wird das Problem synchronisiert. Dies ist eine IIS-Umgebung, sodass geplante Aufgaben zum Synchronisieren der Site verwendet werden sollen. Ich habe die geplante Task-API von WordPress erklärt, aber sie bevorzugen es, sie manuell über ihre eigene Infrastruktur zu synchronisieren.

Wie erstelle ich Code (im Wesentlichen eine PHP-Datei), die von einem Scheduler ohne Benutzername / Passwort ohne Aufruf von wp-load.php ausgeführt werden kann? Ihr Scheduler muss in der Lage sein, eine URL alleine auszuführen, was dies etwas schwierig macht.

Ich versuche, dies ohne Code zu erklären, da es ein generisches Problem ist, aber in diesem Fall sieht das Bulk-Skript, das ich erstellt habe und funktioniert, folgendermaßen aus:

if ( !defined('WP_LOAD_PATH') ) { /** classic root path if wp-content and plugins is below wp-config.php */ $classic_root = dirname(dirname(dirname(dirname(dirname(__FILE__))))) . '/' ; //echo $classic_root; if (file_exists( $classic_root . 'wp-load.php') ) define( 'WP_LOAD_PATH', $classic_root); else if (file_exists( $path . 'wp-load.php') ) define( 'WP_LOAD_PATH', $path); else exit("Could not find wp-load.php"); } // let's load WordPress require_once( WP_LOAD_PATH . 'wp-load.php'); // If the plugin class is not found, die. if (!class_exists('Aragon_eRH_RSS')) { die('Aragon-eRH RSS not installed.'); } $core = new Aragon_eRH(); $core->aerh_xml_parser_bulk(); 

Jetzt können sie http://site.com/wp-content/plugins/aragon-erhr-rss/lib/bulk-sync.php?nonce=thenonce ausführen

Dies führt die Synchronisierungsfunktion aus. Beachten Sie, dass eine Nonce erforderlich ist und über das Admin-Menü des Plugins geändert werden kann. Siehe Screenshot unten: Administrator Screnshot

Hinweis: Ich möchte es vermeiden, weil:

  1. Als schlechte Praxis angesehen
  2. Das Plugin wurde abgelehnt, da WP-Load enthalten war

Solutions Collecting From Web of "Versuchen, wp-load.php zu vermeiden"

Fügen Sie einen Rewrite-Endpunkt hinzu , um Ihrem Plugin eine öffentliche URL zu geben.

 function wpa_my_endpoint(){ add_rewrite_endpoint( 'my_api', EP_ROOT ); } add_action( 'init', 'wpa_my_endpoint' ); 

Nachdem Sie die Umschreibungsregeln gelöscht haben , steht Ihnen die URL für den Scheduler zur Verfügung.

http://example.com/my_api/do/etwas/

Fangen Sie diese Anfragen dann mit der Aktion parse_query , um Ihre Plugin-Aktion aufzurufen:

 function wpa_parse_query( $query ){ if( isset( $query->query_vars['my_api'] ) ){ include( plugin_dir_path( __FILE__ ) . 'stuff/things.php'); exit; } } add_action( 'parse_query', 'wpa_parse_query' );