Zeigt Werte von dynamisch erstellten benutzerdefinierten Metaschlüsseln an

Ich habe ein Formular und Datumsfelder darin: “Datum von” und “Datum bis” (um einen Zeitraum der Verfügbarkeit zu spezifizieren. Es kann mehrere verfügbare Perioden geben, also habe ich einen Knopf gemacht, mit dem Sie mehr “Datum von hinzufügen können “und” Datum bis “Felder.

Ich benutze benutzerdefinierte Meta-Felder zum Speichern der Werte der eingegebenen Tage und hier ist der Code:

$s = 1; foreach($_POST['tgt_available_from'] AS $sID => $sValue){ $ads_data['available_dates_from'][$s] = $sValue; $s++; } $s = 1; foreach($_POST['tgt_available_to'] AS $sID => $sValue){ $ads_data['available_dates_to'][$s] = $sValue; $s++; } $s = 1; foreach( $ads_data['available_dates_to'] AS $sID => $sValue){ update_post_meta($postid, 'available_dates_from_'.$s, $ads_data['available_dates_from'][$s]); update_post_meta($postid, 'available_dates_to_'.$s, $ads_data['available_dates_to'][$s]); $s++; } 

Sobald der Beitrag gespeichert ist, erhalte ich das folgende Meta-Keys / Meta-Werte-Array:

 [available_dates_from_1] => Array ( [0] => 01/19/2012 ) [available_dates_to_1] => Array ( [0] => 01/29/2012 ) [available_dates_from_2] => Array ( [0] => 02/19/2012 ) [available_dates_to_2] => Array ( [0] => 02/28/2012 ) [available_dates_from_3] => Array ( [0] => 03/19/2012 ) [available_dates_to_3] => Array ( [0] => 03/29/2012 ) 

Also das Problem, das ich habe, ist, dass ich nicht weiß, wie ich jetzt alle verfügbaren Daten (von und zu) in Thema Vorlage zeigen könnte. ‘available_dates_from_1’ und ‘available_dates_from_2’ sind nicht miteinander verbunden, so dass ich keine foreach-Schleife machen kann. Ich weiß nicht und die Gesamtzahl der eingegebenen Tage, so dass ich keine While-Schleife verwenden kann.

Vielleicht könnte es eine intelligentere Lösung geben?

Solutions Collecting From Web of "Zeigt Werte von dynamisch erstellten benutzerdefinierten Metaschlüsseln an"

Das ist völlig ungeprüft, aber so etwas sollte funktionieren. Es geht davon aus, dass die Daten vor (Start und Ende) vorgelegen haben – dies hätte bei der Verarbeitung der Daten verifiziert werden sollen.

 $i=1; $key_start = 'available_dates_from_'; $key_end = 'available_dates_to_'; echo '
    '; while($start = get_post_meta($post_id, $key_start.$i, true)){ $end = get_post_meta($post_id, $key_end.$i, true); echo '
  • From '.$start. ' until '.$end.'
  • '; $++; } echo '
';

Dies geht durch jeden der Metaschlüssel für diesen Post 'available_dates_from_i' von i=1 bis der Schlüssel nicht existiert.

Der Nachteil besteht darin, dass so lange fortgefahren wird, bis der erste Schlüssel nicht gefunden wird. Wenn Sie also ein Paar Daten löschen, sagen Sie, dass alle nachfolgenden Daten nicht von dieser Schleife übernommen werden, es sei denn, Sie nummerieren sie neu.

Nachher verweise ich auf den Index, der an den Schlüssel angehängt ist, nicht chronologisch.

Wenn die Abfrage nach einem Datumsbereich nicht wichtig ist, ist es möglicherweise einfacher, die Bereiche als Arrays zu speichern. Wenn dies der Fall ist, ist es wahrscheinlich sinnvoller, dies in Ihrer eigenen benutzerdefinierten Tabelle zu speichern.

Sie können Arrays auch als Meta speichern. Wenn Sie es also auf diese Weise speichern, ist es einfacher, es zu durchlaufen:

 $s = 1; foreach($_POST['tgt_available_from'] AS $sID => $sValue){ $ads_data[$s]['available_dates_from'] = $sValue; $s++; } $s = 1; foreach($_POST['tgt_available_to'] AS $sID => $sValue){ $ads_data[$s]['available_dates_to'] = $sValue; $s++; } update_post_meta($postid, 'available_dates', $ads_data);