Debuggen eines Imports

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.