Übergeben benutzerdefinierter Felddaten als zu speicherndes Array (das resultierende benutzerdefinierte Feldarray ist inkonsistent)

Ich habe stundenlang darauf gestarrt, und es ist klar, dass ich etwas vermisse, aber ich weiß nicht, was es sein kann …

Ich habe benutzerdefinierte Meta-Box zum Hinzufügen von Downloads zu einem bestimmten Beitrag oder einer Seite. Alle Daten werden in einem benutzerdefinierten Feldschlüssel als Array gespeichert. Für jeden “Download” geben wir 3 Informationen ein: Ressourcenname (Eingabe = Text), Ressourcenverknüpfung (Eingabe = Text) und Ressourcentyp (Liste von PDF, Zip-Datei, Video usw.).

Das Problem ist, wenn ich die Daten speichere, wird es irgendwie umarrangiert, die Reihenfolge, in der die Daten gespeichert werden und das resultierende benutzerdefinierte Feld nach dem Speichern ist nicht konsistent. Und während ich speichere, scheinen Daten nach dem Zufallsprinzip in das Array für diesen benutzerdefinierten Feldschlüssel eingefügt zu sein.

Hier ist die function, die die Daten speichert: http://pastebin.com/TY6LFuiL

Der spezifische Abschnitt ist Frage beginnt direkt unter diesem Kommentar: // Wenn übergeben wird, ist ein Array, sollten wir alle vorherigen Daten entfernen

Hier ist das Bit, das die Optionen ausgibt: http://pastebin.com/EGF4dibZ – Dies ist, wo die Dinge durcheinander kommen, weil die Reihenfolge der Daten gespeichert ist und die Reihenfolge der Daten im resultierenden Array für den benutzerdefinierten Feldschlüssel ist nicht konsistent.

Zum Beispiel, wenn ich die Optionen speichern als:

input 1(text): Resource Name 1 - wsm-content-downloads[] input 2(text): http://link.com/1.pdf - wsm-content-downloads[] input 3(select): PDF - wsm-content-downloads[] 

Das Array sieht wie folgt aus, bevor es gespeichert wird:

 Array ( [0] => Resource Name 1 [1] => http://link.com/1.pdf [2] => PDF ) 

Dann speichert die function, die die Daten speichert, durch und für jeden Wert dieses Arrays, sie als benutzerdefinierte Felddaten für denselben Schlüssel (wsm-content-downloads) – was nach dem Speichern zu einem Array führt:

 Array ( [0] => http://link.com/1.pdf [1] => Resource Name 1 [2] => PDF ) 

Hier ist ein detaillierteres Protokoll:

 http://pastebin.com/cdDsN5Sk 

(musste den letzten Link wegen Limit für Links coden)

Ich drucke die benutzerdefinierten Felddaten als ein Array nach jedem Speichern / Aktualisieren in der Schleife aus. Sie können sehen, wie die Daten gespeichert werden, ist überhaupt nicht konsistent … manchmal geht der Wert, der gespeichert / aktualisiert wird, am Anfang des resultierenden benutzerdefinierten Felddatenarrays, manchmal am Ende und manchmal sogar mitten in der Mitte …

Ich brauche das benutzerdefinierte Datenfeld für diesen Schlüssel (wsm-content-downloads), um mit dem Array identisch zu sein, das ich an die Speicherfunktion übergebe, nachdem alles gesagt und getan wurde, aber aus irgendeinem Grund kommt es nicht so heraus …

Und das Schlimmste ist vielleicht, dass dieser Code perfekt auf meinem lokalen Server funktioniert – auf meinem Live-Server tut es das …

Danke im Voraus…

Prost, Bryan

Solutions Collecting From Web of "Übergeben benutzerdefinierter Felddaten als zu speicherndes Array (das resultierende benutzerdefinierte Feldarray ist inkonsistent)"

Definitive Lösung: Da die corefunktion get_post_custom von wp mehrere Datenfelder in zufälliger Reihenfolge als einzelnen Schlüssel zurückgibt, habe ich das Problem getriggers, indem ich eine function zum Ersetzen geschrieben habe, die etwas mehr Flexibilität bietet:

  /*--------------------------------------------------------------- Function: Retrieve post meta field for a post based on ID Usage: [admin/meta_box/downloads.php] = to replace core wp get_post_custom function Params: $id = post id, $key = meta key, $order = ASC|DESC, $return = meta_value|meta_key|post_id|meta_id, $single = true|false @return = result will be array unless $single = true, which will return the last result only ----------------------------------------------------------------*/ function noconflict_get_post_custom($id,$key,$single=false,$column='meta_value',$order='ASC'){ global $wpdb; $data = $wpdb->get_results(" SELECT * FROM $wpdb->postmeta WHERE post_id = $id AND meta_key LIKE '$key' ORDER by meta_id $order "); if( !empty( $data ) ) { $metadata = array(); foreach( $data as $result_object ) { $metadata[] = $result_object->$column; } if ($single) return $metadata[0]; else return $metadata; } }