Es bastante difícil responder concretamente a su pregunta. Sin embargo, la primera parte es fácil. Hace poco hice algo similar en stackoverflow
Las teclas meta se comparan y coinciden exactamente. WP_Query
no tenemos medios para ajustar este comportamiento con un parámetro simple, pero siempre podemos presentar uno nosotros mismos y luego ajustar la posts_where
cláusula para hacer unLIKE
comparación en las teclas meta.
EL FILTRO
Este es solo un filtro básico, ajústelo según sea necesario.
add_filter( 'posts_where', function ( $where, \WP_Query $q )
{
// Check for our custom query var
if ( true !== $q->get( 'wildcard_on_key' ) )
return $where;
// Lets filter the clause
$where = str_replace( 'meta_key =', 'meta_key LIKE', $where );
return $where;
}, 10, 2 );
Como puede ver, el filtro solo se activa cuando configuramos nuestro nuevo parámetro personalizado, wildcard_on_key
a true
. Cuando esto se verifica, simplemente cambiamos el=
comparador al LIKE
comparador
Solo una nota sobre esto, LIKE
comparaciones son inherentemente más caras de ejecutar que otras comparaciones
LA CONSULTA
Simplemente puede consultar sus publicaciones de la siguiente manera para obtener todas las publicaciones con meta claves like_status_{user_id}
$args = [
'wildcard_on_key' => true,
'meta_query' => [
[
'key' => 'like_status_',
'value' => 1,
]
]
];
$query = new WP_Query( $args );
OTRA PREGUNTA
Los campos personalizados no tienen impacto en el rendimiento, puede leer mi publicación sobre este tema aquí . Sin embargo, me preocupa que digas que cada publicación puede tener cientos o miles de Me gusta. Esto puede afectar su rendimiento al obtener y almacenar en caché una cantidad tan grande de datos de campo personalizados. También puede obstruir su base de datos con una gran cantidad de datos de campo personalizados innecesarios, lo que hace que sea bastante difícil de mantener.
No soy un gran fanático del almacenamiento de datos serializados en campos personalizados, ya que uno no puede buscar u ordenar por datos serializados. Sin embargo, sugeriría almacenar todas las ID de usuario en una matriz en un campo personalizado. Simplemente puede actualizar la matriz con la ID de usuario cuando a un usuario le gusta una publicación. Obtener los datos de campo personalizados y recorrer la matriz de ID y hacer algo con los ID es fácil. Solo echa un vistazo aget_post_meta()
Actualizar un campo personalizado también es fácil. Para eso, tendrá que investigar update_post_meta()
, no sé cómo crear sus campos personalizados, pero update_post_meta()
definitivamente es algo que querría usar.
Si necesita enviar correos electrónicos o notificaciones push cuando se actualiza un campo personalizado, tiene los siguientes enlaces disponibles para trabajar. ( Ver update_metadata()
para contexto )
CONCLUSIÓN
Justo antes de publicar esto, nuevamente, antes de ir a la ruta serializada, asegúrese de que no necesite ordenar por los datos ordenados o buscar datos particulares dentro de los datos serializados.