Il est assez difficile de répondre concrètement à votre question. La première partie est cependant facile. J'ai récemment fait quelque chose de similaire sur stackoverflow
Les méta-clés sont comparées et correspondent exactement. WP_Query
n'avons aucun moyen d'ajuster ce comportement avec un paramètre simple, mais nous pouvons toujours en introduire un nous-mêmes puis ajuster la posts_where
clause pour faire une LIKE
comparaison sur les méta-clés.
LE FILTRE
Ce n'est qu'un filtre de base, ajustez-le selon vos besoins.
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 );
Comme vous pouvez le voir, le filtre n'est déclenché que lorsque nous définissons notre nouveau paramètre personnalisé, wildcard_on_key
sur true
. Lorsque cela vérifie, nous changeons simplement le =
comparateur en LIKE
comparateur
Juste une note à ce sujet, les LIKE
comparaisons sont intrinsèquement plus coûteuses à exécuter que les autres comparaisons
LA REQUÊTE
Vous pouvez simplement interroger vos messages comme suit pour obtenir tous les messages avec des méta-clés like_status_{user_id}
$args = [
'wildcard_on_key' => true,
'meta_query' => [
[
'key' => 'like_status_',
'value' => 1,
]
]
];
$query = new WP_Query( $args );
AUTRE QUESTION
Les champs personnalisés n'ont pas d'impact sur les performances, vous pouvez lire mon article sur ce sujet ici . Je suis cependant troublé par le fait que vous dites que chaque message peut avoir des centaines ou des milliers de likes. Cela peut vous nuire à l'obtention et à la mise en cache de performances d'une telle quantité de données de champ personnalisé. Il peut également obstruer votre base de données avec une énorme quantité de données de champ personnalisées inutiles, ce qui le rend assez difficile à maintenir.
Je ne suis pas un grand fan du stockage de données sérialisées dans des champs personnalisés car on ne peut pas rechercher ou commander par des données sérialisées. Je suggérerais cependant de stocker tous les ID utilisateur dans un tableau sous un champ personnalisé. Vous pouvez simplement mettre à jour le tableau avec l'ID utilisateur lorsqu'un utilisateur aime un message. Obtenir les données de champ personnalisées et boucler sur le tableau des ID et faire quelque chose avec les ID est facile. Jetez un œil àget_post_meta()
La mise à jour d'un champ personnalisé est également facile. Pour cela, vous devrez vous pencher sur update_post_meta()
, je ne sais pas comment vous créez vos champs personnalisés, mais update_post_meta()
c'est certainement quelque chose que vous voudriez utiliser.
Si vous devez envoyer des e-mails ou des notifications push lorsqu'un champ personnalisé est mis à jour, vous disposez des crochets suivants pour travailler. ( Voir update_metadata()
pour le contexte )
CONCLUSION
Juste avant de poster ceci, encore une fois, avant de suivre la route sérialisée, assurez-vous que vous n'auriez pas besoin de trier par les données triées ou de rechercher des données particulières à l'intérieur des données sérialisées.