Otra ligera mejora con respecto a la respuesta de @sMyles.
He tenido casos en los que los ID se han almacenado tanto 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 conocido problema con wp_set_object_terms()
, donde puedes usar los ID de los términos para establecer los términos, pero si no los conviertes como enteros primero tienes una probabilidad del 50% de crear nuevos términos con esos números. como sus nombres en su lugar.
Esto puede hacer que se almacenen de manera muy diferente en una matriz serializada, como se puede ver en los extractos de un caso de este tipo de la base de datos del 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
Tanto de lo anterior, cuando se alimenta a través de print_r()
se procesará como
Array
(
[0] => 1
)
Para solucionar esto, realicé un pequeño ajuste al meta_query
al agregar un relation
y otra versión de la consulta que convirtió el valor como un número 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'
),
),
EDIT: Me di cuenta de que este método podría correr el riesgo de colisiones con los índices de matriz, lo que podría permitir 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, mientras este funciona si tiene el problema tratado, lo mejor es asegurarse de que los valores que desea buscar se emitan como cadenas antes de guardarlos para poder usar el método de @sMyles en su lugar.