Moechte man auf einer Seite mit WordPress xml-Dateien importieren, findet man allerlei kostenlose Plugins, die aber fast alle mindestens einen Haken haben. Seis nun eine Begrenzung, schlechte Bedienbarkeit oder die Tatsache, dass ein Plugin seit 2 oder 3 Jahren nicht mehr aktualisiert wurde.

Kuerzlich wurde ich vor eine Aufgabe gestellt. Sie lautete etwa “Inhalte aus xml-Dateien auf einem entfernten Server nehmen, auf eine bestimmte Weise anordnen und darstellen. Das Ganze automatisiert und einmal pro Tag.”. Ich begab mich natuerlich auf die Suche und probierte herum. Ich haette die Moeglichkeit diese Angelegenheit manuell mit PHP zu loesen, aber das kostet Zeit. Zudem das alles ueber WordPress verwaltbar sein soll. Da haette ich ja fast ein kleines Startup gruenden koennen.

Ich fand dann recht schnell WP All Import. Ueber die kostenlose Version und einige YouTube-Videos verschaffte ich mir einen Eindruck und hielt es fuer eine gute Idee das Tool einfach mal zu bestellen. Ja richtig, habe ein WordPress Plugin gekauft.

Zum Plugin selbst kann ich vielleicht zu einem spaeteren Zeitpunkt mehr schreiben. Jetzt geht es nur kurz darum, wie man verschachtelte Schleifen erstellen kann.

Zuerst mal meine XML-Struktur:

<hersteller id="111">
 <bezeichnung>Hersteller 1</bezeichnung>
  <modellGruppen>
   <modellGruppe id="221">
    <bezeichnung>Modellgruppe 1</bezeichnung>
    <modelle>
     <modell id="551">
      <bezeichnung>Modell 1</bezeichnung>
     </modell>
     <modell id="552">
      <bezeichnung>Modell 2</bezeichnung>
     </modell>
     <modell id="553">
      <bezeichnung>Modell 3</bezeichnung>
     </modell>
   </modelle>
  </modellGruppe>
  <modellGruppe id="222">
    <bezeichnung>Modellgruppe 2</bezeichnung>
    <modelle>
     <modell id="561">
      <bezeichnung>Modell 1</bezeichnung>
     </modell>
     <modell id="562">
      <bezeichnung>Modell 2</bezeichnung>
     </modell>
     <modell id="563">
      <bezeichnung>Modell 3</bezeichnung>
     </modell>
   </modelle>
  </modellGruppe>
 </modellGruppen>
</hersteller>

Nun kann ich mit folgendem Template die Bezeichnung aller “modellGruppe”-Abschnitte ausgeben lassen:

[FOREACH({modellGruppe})]
{bezeichnung[1]}
[ENDFOREACH]

Denn die Foreach-Schleife tut genau das, wonach sie auch benannt ist – sie geht eine Liste durch und gibt jeden Eintrag aus.

Moechte ich nun aber noch zu jedem Modell die Bezeichnung wissen, wird es ein bisschen schwieriger. Hier kommen dann naemlich die verschachtelten Schleifen zum Einsatz.

[FOREACH({modellGruppe})]
{bezeichnung[1]}
[FOREACH({modelle[1]/modell})]
{bezeichnung[1]}
[ENDFOREACH]
[ENDFOREACH]

Unsere Ausgabe sieht nun so aus, dass wir eine Liste aller Modellgruppen angezeigt bekommen, die wiederum jeweils eine Liste mit den Modellen beinhalten. Es sollte dann etwa so aussehen:

Modellgruppe 1
Modell 1
Modell 2
Modell 3
Modellgruppe 2
Modell 1
Modell 2
Modell 3

Wichtig ist hierbei nur, dass man im Pfad weiter geht. Das heisst, dass man den Pfad bei einer verschachtelten Schleife nicht absolut sein darf. Er muss relativ zum Pfad der uebergeordneten Schleife sein.

Nochmal absolute und relative Pfade fuer die, die es sich nicht schon ableiten koennen oder wissen:

Absolut – Kompletter Pfad von Anfang bis Ende (z.B. Telefonnummer mit Ortsvorwahl)
Relativ – Pfad relativ zu einem bestimmten Standort (z.B. Telefonnummer ohne Ortsvorwahl)

Man kann die Schleifen beliebig oft verschachteln, allerdings wird es irgendwann unuebersichtlich. Mit dieser Methode konnte ich einige gute Templates bauen die mir viel Zeit gespart haben.

Dank geht an Artyom von WP All Import, der mir per Mail sehr gut geholfen hat.

2 thoughts on “Verschachtelte FOREACH-Schleife mit WP All Import 3

  1. Hi,

    leider ist Artyom nicht bei WP All Import :-(
    Hast Du schon mit Woocommerce und WP All Import gearbeitet ? ich hätte da ne kleine Frage ….

  2. Mit WooCommerce noch nicht so sehr, aber vielleicht kann ich trotzdem helfen. Schick mir einfach deine Frage per Mail oder über das Kontaktformular.

    Grüße

Leave a Reply

Your email address will not be published. Required fields are marked *