2017-08-25 5 views
0

Ich habe ein wiederholbares Feld in einem benutzerdefinierten Beitragstyp , der mit einem anderen benutzerdefinierten Beitragstyp verknüpft ist. Ich möchte das wiederholbare Feld durchlaufen und dann für jedes Feld auf die Daten vom verknüpften Post-Typ zugreifen. Das erste Ergebnis wird zurückgegeben, aber auf dem zweiten bekomme ich folgende Fehlermeldung:PHP-Fehler beim Versuch, Array auszugeben

Fatal error : [] operator not supported for strings.

Ich habe versucht, die Klammern aus meinen Variablen wie $ Personal = $ Trainer Entfernen [ ‚team_staff‘], aber das hat nicht funktioniert.

Ich habe auch versucht, $ staff = array(); vor der Schleife und das hat nicht funktioniert.

nicht sicher, was ich falsch hier:

global $post; 

// Get The Staff Members 
$coaches = get_post_meta($post->ID, 'repeatable_fields', true); 
if ($coaches) : 
    foreach ($coaches as $coach) : 
     $staff[] = $coach['team_staff']; 
     $role[] = $coach['team_role']; 

     // Loop through each staff member 
     foreach($staff as $index => $staff) : 
      $args = array (
       'post_type' => 'staff', 
       'title' => $staff 
      ); 

      $posts = get_posts($args); 
      foreach ($posts as $post) : setup_postdata ($post); 

       // get post meta here 

      endforeach; 
     endforeach; 

    endforeach; 
endif; 
+0

Mögliches Duplikat von: https://stackoverflow.com/questions/5879675/problem-with-fatal-error-operator-not-supported-for-strings-in – RToyo

+0

Mögliches Duplikat von [Problem mit: Schwerwiegender Fehler: \ [\] Operator wird nicht unterstützt für Strings in] (https://stackoverflow.com/questions/5879675/problem-with-fatal-error-operator-not-supported-for-strings-in) – aynber

+0

Ich habe $ role [auskommentiert] ] = $ coach ['team_role']; und immer noch einen Fehler bekommen.Ich habe versucht, die Antwort aus dem oben genannten Artikel und entfernt die [] von $ staff = $ coach ['team_staff']; und bekomme auch einen Fehler. – RiotAct

Antwort

1

Sie müssen sich mit Ihrer Schleife Variablennamen, vorsichtig sein. Zum Beispiel ändern $ Personal zu $ ​​staff_member:

global $post; 

// Get The Staff Members 
$coaches = get_post_meta($post->ID, 'repeatable_fields', true); 
if ($coaches) : 
    foreach ($coaches as $coach) : 
     $staff[] = $coach['team_staff']; 
     $role[] = $coach['team_role']; 

     // Loop through each staff member 
     foreach($staff as $index => $staff_member) : 
      $args = array (
       'post_type' => 'staff', 
       'title' => $staff_member 
      ); 

      $posts = get_posts($args); 
      foreach ($posts as $post) : setup_postdata ($post); 

       // get post meta here 

      endforeach; 
     endforeach; 

    endforeach; 
endif; 

Auch im Idealfall sollten Sie Ihre Arrays $ Personal und $ Rolle außerhalb der Schleifen initialisieren:

$staff = []; 
$role = []; 

Außerdem ist es unklar, warum man immer wieder hinzufügen würde Das $ staff-Array und Schleife mit jeder Iteration des $ coachers-Arrays. Betrachten wir die beiden foreach Schlaufen zu trennen und sie eine nach der anderen auszuführen:

global $post; 

// Get The Staff Members 
$coaches = get_post_meta($post->ID, 'repeatable_fields', true); 
if ($coaches) : 
    $staff = []; 
    $role = []; 

    foreach ($coaches as $coach) : 
     $staff[] = $coach['team_staff']; 
     $role[] = $coach['team_role']; 
    endforeach; 

    // Loop through each staff member 
    foreach($staff as $index => $staff_member) : 
     $args = array (
      'post_type' => 'staff', 
      'title' => $staff_member 
     ); 

     $posts = get_posts($args); 
     foreach ($posts as $post) : setup_postdata ($post); 

      // get post meta here 

     endforeach; 
    endforeach; 

endif; 
+0

Danke. Ich dachte, dass ich meine Foreach-Schleifen verschachteln müsste, um auf die Daten der vorherigen Schleife zugreifen zu können. Jetzt weiß ich. – RiotAct

+0

Natürlich. Die Arrays/Variablen sind nicht auf Schleifenkonstrukte beschränkt, sondern nur auf Funktionen oder global. –

0

Ihr Codeentwurf ist falsch:

  • Ihre zweite foreach wird in dem ersten verschachtelten und iteriert durch das Array $staff welches füllte die erste foreach. Ich weiß nicht, ob es absichtlich ist, was das bedeutet, dass in der ersten Schleife der ersten foreach die zweite foreach durch einen Eintrag iteriert, den einen, der vorher zwei Zeilen davor gesetzt wurde, durch zwei Einträge in der zweiten Schleife usw ...
  • Ihre zweite Foreach iteriert durch $staff und benennt den Wert, den sie gerade verwendet $staff. Sobald das zweite foreach ausgeführt wird, ist Ihr Array, das früher als $staff bekannt war, verschwunden und durch den Wert des ersten Eintrags überschrieben, der zufällig ein string ist.

Wenn die ersten foreach seine zweite Schleife zu tun, ist Ihr Code daher versuchen, den Index-Operator zu verwenden - [] - in einen String, wie der Fehler sagt.

Try this:

global $post; 

// Get The Staff Members 
$coaches = get_post_meta($post->ID, 'repeatable_fields', true); 
if ($coaches) : 
    $staffs = $roles = array(); 
    foreach ($coaches as $coach) : 
     $staffs[] = $coach['team_staff']; 
     $roles[] = $coach['team_role']; 
    } 
    // Loop through each staff member 
    foreach($staffs as $index => $staff) : 
     $args = array (
      'post_type' => 'staff', 
      'title' => $staff 
     ); 

     $posts = get_posts($args); 
     foreach ($posts as $post) : setup_postdata ($post); 
      // get post meta here 
     } 
    } 
} 

ich einen Plural zu den Arrays hinzugefügt, so dass es offensichtlich ist, dass sie mehrere Rollen/Stäbe enthalten, da Sie die gleiche Regel benennen Sie die anderen Array $coaches angelegt ist und dessen Werte benannt $coach in der foreach.

+0

Sie waren nur ein paar Minuten hinter der anderen Antwort, aber das war auch hilfreich. Vielen Dank! – RiotAct

+0

@RiotAct Der Hauptpunkt ist, dass Sie sich aus Ärger gemacht haben. – ksjohn

+1

Noch eine kurze Frage: Ich habe später auf $ role als $ role [$ index] zugegriffen, wie kann ich jetzt darauf zugreifen? Nevermind: Ich habe es herausgefunden: $ roles [$ index]; – RiotAct

Verwandte Themen