Beim Hinzufügen von Arrays zu Post-Meta mit add_post_meta werden neue Sub-Arrays hinzugefügt. Ich habe mich gefragt, ob es eine Möglichkeit gibt, diese Sub-Arrays zu benennen.
also anstatt am Ende mit
array([0](2,3), [1](4,5))
Ich würde bekommen
array ([meaningful_name](2,3),[meaningful_name2](4,5))
Wenn mehrere Metawerte für denselben Metaschlüssel verwendet werden, speichert WordPress die Werte in verschiedenen Datenbankzeilen. So wird jedes Array in einer Zeile gespeichert.
Nehmen wir an, Sie haben ein Array wie das folgende:
$family = [
'father' => [ 'John', 'Doe', 40 ],
'mother' => [ 'Jane', 'White', 39 ],
'child_1' => [ 'Luke', 'Doe', 5 ]
];
Wenn Sie jedes Sub-Array als eine andere Meta-Zeile speichern, ist der meta_id
der einzige Bezeichner für diese Zeile, aber er ist nicht wirklich aussagekräftig und mit WordPress-Funktionen nur schwer zu bekommen.
Eine Problemumgehung könnte darin bestehen, eine Karte mit Werten/Meta-IDs in einem anderen Post-Meta zu speichern.
Dies kann dank der Tatsache geschehen, dass sowohl update_post_meta()
als auch add_post_meta()
die soeben hinzugefügte Meta-ID zurückgeben.
Sie können also so etwas tun:
$map = [];
foreach( $family as $who => $person ) {
// update_post_meta returns the meta ID
$map[ $who ] = update_post_meta( $postId, 'family_member', $person );
}
// we store the map of family "role" to meta IDs in a separate meta
update_post_meta( $postId, 'family_members_map', $map );
Wenn Sie Werte abrufen, z.
$family = get_post_meta( $postId, 'family_member' );
sie erhalten ein Array mit zwei Dimensionen ohne Schlüssel wie folgt:
[
[ 'John', 'Doe', 40 ],
[ 'Jane', 'White', 39 ],
[ 'Luke', 'Doe', 5 ],
]
Kurz gesagt, Sie verlieren die Sub-Array-Schlüssel.
Sie können jedoch die von Ihnen gespeicherte Karte und die Funktion get_post_meta_by_id
verwenden, um Ihre ursprünglichen Daten wiederherzustellen:
$map = get_post_meta( $postId, 'family_members_map', true );
$family = array_combine( array_keys( $map ), array_map( 'get_post_meta_by_id', $map ) );
Und Familie wird gleich den ursprünglichen Daten sein:
[
'father' => [ 'John Doe', 40 ],
'mother' => [ 'Jane White', 39 ],
'child_1' => [ 'Luke Doe', 5 ]
]
Daten aktualisieren, es ist nicht sehr schwer:
$justBorn = [ 'Anna', 'Doe', 0 ];
// current map
$map = get_post_meta( $postId, 'family_members_map', true);
// add both new sub array and new meta ID to map
$map['child_2'] = update_post_meta( $postId, 'family_member', $justBorn );
// update the map
update_post_meta( $postId, 'family_members_map', $map );
Der obige Ansatz funktioniert, aber es ist nicht der einfachste Weg.
Tatsächlich wäre es einfacher, das gesamte anfängliche assoziative Array (das $family
-Array) als einzelnes Meta statt in verschiedenen Unterarrays zu speichern.
// store data
update_post_meta( $postId, 'family_members', $family );
// retrieve data (please note the `true` as 3rd argument)
$family = get_post_meta( $postId, 'family_members', true );
// update data
$family = get_post_meta( $postId, 'family_members', true );
$family['child_2'] = [ 'Anna', 'Doe', 0 ];
update_post_meta( $postId, 'family_members', $family );
Das Speichern, Abrufen und Aktualisieren von Daten ist ganz einfach und es entsteht kein zusätzlicher Aufwand.
In den meisten Fällen ist der "alles an einem Ort" Ansatz am bequemsten.
Wenn es jedoch Hunderte oder sogar Tausende von Sub-Arrays gibt, würde die Verwendung eines eindeutigen Meta-Werts zum Speichern aller Arrays zu einer sehr großen Speicherkapazität führen, die zum Abrufen und Parsen von Daten verwendet wird. Durch die Verwendung verschiedener Zeilen und einer modernen PHP -Funktion wie generators kann diese Speicherkapazität drastisch reduziert werden.
Darüber hinaus kann dieser Ansatz beim Umgang mit vorhandenen Daten (möglicherweise von einer alten Version der Website geerbt) hilfreich sein, um aussagekräftige Informationen zu erhalten, ohne alte Daten zu konvertieren.
Wenn kleinere und charakterisiertere Sub-Arrays in verschiedenen DB-Zeilen gespeichert sind, könnte eine Abfrage nach Posts mit Meta-Abfrage und LIKE
gegen das serialisierte Array im Meta-Werteinfacher und zuverlässiger sein, selbst wenn die tatsächliche Zuverlässigkeit gegeben ist hängt stark von der Struktur der Daten ab.
Einige mögliche Möglichkeiten für die Verwendung von add_post_meta:
Für Details folgen Sie bitte dem Link
add_post_meta($post_id, $meta_key, $meta_value, $unique);
update_post_meta($post_id, $meta_key, $meta_value, $prev_value);
$meta_values = get_post_meta( $post_id, $key, $single );
update_post_meta($post_ID, {key}, {array of vals})
$data = Array(
'url' => $url,
'name' => $name,
'description' => $desc,
);
//Update inserts a new entry if it doesn't exist, updates otherwise
update_post_meta($post_ID, 'yourkey', $data);
//To Fetch
$yourdata = get_post_meta($post_ID, 'yourkey');
Vielen Dank!