Otra ligera mejora de la respuesta de @sMyles.
He tenido casos en los que las ID se han almacenado como cadenas (como cuando se toman de una entrada de formulario) y como enteros (por ejemplo update_post_meta($post_id, authorized_users', array(get_current_user_id()));
). Esto es algo así como el problema bien conocido con el wp_set_object_terms()
que puede usar ID de términos para establecer los términos, pero si no los convierte como enteros primero, tiene una probabilidad del 50% de crear nuevos términos con esos números como sus nombres en lugar.
Esto puede hacer que se almacenen de manera bastante diferente en una matriz serializada, como se puede ver en los extractos de tal caso de la base de datos de mi sitio de prueba:
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
Ambos de los anteriores, cuando se alimentan, se print_r()
mostrarán como
Array
(
[0] => 1
)
Para solucionar esto, realicé un pequeño ajuste al meta_query
agregar una relation
y otra versión de la consulta que arrojó el valor como un entero en lugar de una cadena.
Aquí está el resultado final:
'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'
),
),
EDITAR: Acabo de darme cuenta de que este método podría correr el riesgo de colisiones con los índices de la matriz, lo que podría permitir a alguien el acceso ilícito a los materiales si no están en la matriz, pero su ID de usuario aparece como un índice. Como tal, si bien esto funciona si tiene el problema discutido, una mejor práctica es asegurarse de que los valores que desea buscar se conviertan como cadenas antes de guardarlos para que pueda usar el método de @sMyles.