Eine weitere leichte Verbesserung gegenüber der Antwort von @sMyles.
Ich hatte Fälle, in denen IDs sowohl als Zeichenfolgen (z. B. aus einer Formulareingabe) als auch als Ganzzahlen (z update_post_meta($post_id, authorized_users', array(get_current_user_id()));
. B. ) gespeichert wurden . Dies ähnelt dem bekannten Problem, bei wp_set_object_terms()
dem Sie Term-IDs verwenden können, um die Termini festzulegen. Wenn Sie sie jedoch nicht zuerst als Ganzzahlen umwandeln, haben Sie eine Chance von etwa 50%, neue Termini mit diesen Zahlen als Namen zu erstellen stattdessen.
Dies kann dazu führen, dass sie in einem serialisierten Array ganz anders gespeichert werden, wie aus den Auszügen eines solchen Falls aus der Datenbank meiner Testwebsite ersichtlich ist:
a:1:{i:0;s:1:"1";} // 's' for 'string', also note the double quotes
a:1:{i:0;i:1;} // 'i' for 'integer', no quotes
Beide oben genannten Optionen print_r()
werden bei Durchspeisung als gerendert
Array
(
[0] => 1
)
Um dies zu beheben, habe ich eine kleine Änderung an der Abfrage vorgenommen, meta_query
indem ich eine relation
und eine andere Version der Abfrage hinzugefügt habe , die den Wert als Ganzzahl anstelle einer Zeichenfolge umwandelt.
Hier ist das Endergebnis:
'meta_query' => array(
'relation' => 'OR', // Lets it know that either of the following is acceptable
array(
'key' => 'bcm_enm_authorized_users',
'value' => serialize(strval(get_current_user_id())), // Saved as string
'compare' => 'LIKE'
),
array(
'key' => 'bcm_enm_authorized_users',
'value' => serialize(intval(get_current_user_id())), // Saved as integer
'compare' => 'LIKE'
),
),
BEARBEITEN: Ich habe gerade festgestellt, dass diese Methode das Risiko von Kollisionen mit Array-Indizes birgt, die es jemandem ermöglichen können, illegal auf Materialien zuzugreifen, wenn sie nicht im Array enthalten sind, aber ihre Benutzer-ID als Index angezeigt wird. Während dies funktioniert, sollten Sie sicherstellen, dass alle zu suchenden Werte vor dem Speichern als Zeichenfolgen umgewandelt werden, damit Sie stattdessen die @ sMyles-Methode verwenden können.