È abbastanza difficile rispondere concretamente alla tua domanda. La prima parte è facile però. Di recente ho fatto qualcosa di simile su StackOverflow
Le chiavi meta vengono confrontate e corrispondono esattamente. WP_Query
non abbiamo alcun mezzo per regolare questo comportamento con un semplice parametro, ma possiamo sempre introdurne uno noi stessi e quindi regolare la posts_where
clausola per fare un LIKE
confronto su meta-chiavi.
IL FILTRO
Questo è solo un filtro di base, regolalo secondo necessità.
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 );
Come puoi vedere, il filtro viene attivato solo quando impostiamo il nostro nuovo parametro personalizzato wildcard_on_key
su true
. Quando questo viene verificato, cambiamo semplicemente il =
comparatore in LIKE
comparatore
Solo una nota su questo, i LIKE
confronti sono intrinsecamente più costosi per eseguire altri confronti
LA DOMANDA
Puoi semplicemente interrogare i tuoi post come segue per ottenere tutti i post con meta-chiavi like_status_{user_id}
$args = [
'wildcard_on_key' => true,
'meta_query' => [
[
'key' => 'like_status_',
'value' => 1,
]
]
];
$query = new WP_Query( $args );
ALTRE DOMANDE
I campi personalizzati non influiscono sulle prestazioni, puoi leggere il mio post su questo argomento qui . Sono comunque preoccupato che tu dica che ogni post può avere centinaia o migliaia di Mi piace. Questo può colpirti quando ottieni prestazioni e memorizzi nella cache una così grande quantità di dati sul campo personalizzati. Può anche ostruire il tuo db con un'enorme quantità di dati di campo personalizzati non necessari che lo rendono piuttosto difficile da mantenere.
Non sono un grande fan della memorizzazione di dati serializzati in campi personalizzati in quanto non è possibile cercare o ordinare in base a dati serializzati. Suggerirei comunque di memorizzare tutti gli ID utente in un array in un campo personalizzato. Puoi semplicemente aggiornare l'array con l'ID utente quando a un utente piace un post. Ottenere i dati dei campi personalizzati e passare in rassegna l'array di ID e fare qualcosa con gli ID è facile. Dai un'occhiataget_post_meta()
Anche l'aggiornamento di un campo personalizzato è semplice. Per questo, dovrai esaminare update_post_meta()
, non so come creare i tuoi campi personalizzati, ma update_post_meta()
è sicuramente qualcosa che vorresti usare.
Se è necessario inviare e-mail o notifiche push quando si aggiorna un campo personalizzato, sono disponibili i seguenti hook con cui lavorare. ( Vedi update_metadata()
per il contesto )
CONCLUSIONE
Appena prima di pubblicarlo, di nuovo, prima di seguire il percorso serializzato, assicurati che non sia necessario ordinare in base ai dati ordinati o cercare dati particolari all'interno dei dati serializzati.