Ziel dieses Tutorials
Ausgabe von Debuginformationen in der Konsole während der Anpassung von Mappings oder dem Einsatz von Hooks.
Hintergründe
Der Import läuft automatisch im Hintergrund ab und kann lediglich durch das Logfile kontrolliert werden. Das dient aber hauptsächlich dazu evtl. Probleme im Produktivbetrieb zu erkennen.
Bei der Entwicklung, vor allem bei der Anpassung der Mapping-Tabelle, oder wenn man eigene Hooks (für Action und Filter) verwendet, ist ein einfaches Debuggen in der Konsole komfortabler.
immonex OpenImmo2WP enthält dazu einige CLI-Kommandos, mit dem man Prozesse steuern kann.
Vorarbeit
Node.js und das Programm nodemon – für die Überwachung von Dateiänderungen – sind zu installieren.
Die passende Node.js-Version für Ihre Betriebssystem kann hier ausgewählt, heruntergeladen und installiert werden: https://nodejs.org/en/download/ (die LTS-Version ist ausreichend)
Nachdem Node.js installiert ist, kann nodemon global installiert werden:
npm install -g nodemon
Automatische Ausführung ausschalten
Unter Allgemeine Einstellungen > Auto-Import aktivieren
ausschalten,
oder define( 'DISABLE_WP_CRON', true );
in wp-config.php
setzen.
Im Produktivsystem unbedingt kontrollieren und WP-Cron wieder zulassen.
Ausführen
Mit folgendem Befehl im root-Verzeichnis Ihrer WordPress-Installation wird die Ausführung gestartet:
nodemon \
-w wp-content/themes/my-theme/functions.php \
-w wp-content/uploads/immonex-openimmo-import/mappings/ \
-e csv \
--exec "
wp immonex-openimmo2wp reset --user=1 ; \
cp ~/openimmo_demodaten.zip wp-content/uploads/immonex-openimmo-import/ ; \
wp immonex-openimmo2wp delete-all ; \
wp immonex-openimmo2wp import
"
Wir teilen nodemon
mit, dass wir die functions.php
in unserem Themeverzeichnis (in dem Beispiel my-theme
) überwachen, sowie alle csv
-Dateien im Mapping-Verzeichnis.
Wird nun eine der überwachten Dateien geändert, dann wird der exec
-Befehl ausgeführt.
Mit dem exec-Befehl wp immonex-openimmo2wp reset --user=1
teilen wir dem Plugin mit, das laufende oder unterbrochene Importe beendet werden.
Wichtig ist, dass user
mit der ID, dem Benutzernamen, oder der E-Mail-Adresse eines Admin-Benutzers verwendet wird.
Der 2. exec
-Befehl kopiert unsere OpenImmoXML-Datei aus unserem Home-Verzeichnis in das Importverzeichnis. Nach einem erfolgreichen Import wird diese Datei in das Archiv-Verzeichnis verschoben, daher kopieren wir sie einfach bei jedem Aufruf dorthin.
Der 3. exec
-Befehl löscht bereits importierte Immobilien aus WordPress.
Mit wp immonex-openimmo2wp import
starten wir den Importvorgang manuell.
Bitte diesen Befehl nur während der Entwicklung verwenden und nicht um später produktiv die Importe zu starten. Der Produktiv-Import läuft über die WP-Cron-Schnittstelle.
Laufende Importe werden nun zurückgesetzt, die Datei kopiert, alte Immobilien gelöscht und der neue Import findet statt, bisher ohne weitere Ausgabe (sofern kein Fehler vorliegt).
Beispiel: Änderungen vor dem Import vornehmen
Wir erstellen nun einen einfachen Filter, der eine Immobilie vor dem Import ändert und den Titel in der Konsole ausgibt, diesen fügen wir in unserer functions.php
ein:
function my_debug( $immobilie, $infos ) {
// Direkte Debugausgabe
print_r( $immobilie->freitexte->objekttitel );
// Titel ändern
$immobilie->freitexte->objekttitel .= ' - Top-Immobilie';
// neue Daten zurückliefern
return $immobilie;
}
add_action( 'immonex_oi2wp_property_xml_before_import', 'my_debug', 100, 2 );
Unter immonex > Immobilien
erscheinen die neu importierten Immobilien mit dem Zusatz Top Immobilie
:
Würde man im obigen Filter ein exit;
vor dem return
einfügen, dann würden die Daten der ersten Immobilien angezeigt und der Import beendet.
Unter Einstellungen > OpenImmo Import > Verzeichnisse / Manueller Import
könnte man dann sehen, dass der Import gestoppt ist und erst nach einer gewissen Zeit erneut gestartet werden kann (daher der 1. exec
-Befehl, der diesen Zustand zurücksetzt).
Beispiel: Gespeicherte Importdaten ausgeben
Wenn Sie die Mapping-Tabelle modifizieren und als csv-Datei speichern (oder direkt die csv-Datei bearbeitest), dann können Sie das Ergebnis über den Action-Hook immonex_oi2wp_property_imported
direkt anzeigen lassen, dieser wird nach dem Import einer Immobilie ausgeführt.
Im Folgenden werden alle Meta-Angaben ausgegeben (es kann natürlich auch eine hübschere Formatierungsausgabe verwendet werden):
function my_debug( $post_id, $immobilie ) {
$meta = get_post_meta( $post_id );
// print_r( $meta ); // alles Ausgeben so wie es ist, oder:
echo 'Post: ' . $post_id . PHP_EOL;
foreach ( $meta as $key => $value ) {
echo str_repeat( '-', 80 ) . PHP_EOL;
echo $key . ': ' . $value[0] . PHP_EOL;
}
}
add_action( 'immonex_oi2wp_property_imported', 'my_
Oder eine spezifische Eigenschaft ausgeben:
function my_debug( $post_id, $immobilie ) {
$key = '_inx_property_title';
$value = get_post_meta( $post_id, $key, true );
echo 'Post: ' . $post_id . PHP_EOL;
echo $key . ': ' . $value . PHP_EOL;
}
add_action( 'immonex_oi2wp_property_imported', 'my_debug', 100, 2 );
Schlusswort
Wie Sie gesehen haben, wird bei jedem Speichern der functions.php
oder beim Ändern einer csv
-Mappingdatei der komplette Vorgang automatisch gestartet, ohne dass man in der Konsole erneut Befehle starten muss.
Sie können nun alle Action– und Filter-Hooks verwenden, um Ihre Modifikationen oder Debugausgaben an den nötigen Stellen vorzunehmen.
Beenden können Sie die Konsolenausgabe mit STRG+C
.