Konkretnie trudno odpowiedzieć na twoje pytanie. Pierwsza część jest jednak łatwa. Niedawno zrobiłem coś podobnego w przypadku przepełnienia stosu
Meta-klucze są porównywane i pasują dokładnie. WP_Query
nie mamy środków na dostosowanie tego zachowania za pomocą prostego parametru, ale zawsze możemy wprowadzić go samodzielnie, a następnie dostosować posts_where
klauzulę, aby LIKE
porównać meta-klucze.
FILTR
To tylko podstawowy filtr, dostosuj go w razie potrzeby.
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 );
Jak widać, filtr jest uruchamiany tylko wtedy, gdy ustawimy nasz nowy parametr niestandardowy wildcard_on_key
na true
. Kiedy to się sprawdza, po prostu zmieniamy =
komparator na LIKE
komparator
Tylko uwaga na ten temat, LIKE
porównania są z natury droższe w porównaniu z innymi porównaniami
ZAPYTANIE
Możesz po prostu wysłać zapytanie do swoich postów w następujący sposób, aby uzyskać wszystkie posty z meta-kluczami like_status_{user_id}
$args = [
'wildcard_on_key' => true,
'meta_query' => [
[
'key' => 'like_status_',
'value' => 1,
]
]
];
$query = new WP_Query( $args );
INNE PYTANIE
Pola niestandardowe nie mają wpływu na wydajność, możesz przeczytać mój post na ten temat tutaj . Niepokoi mnie jednak to, że każdy post może mieć setki lub tysiące polubień. Może to wpłynąć na zwiększenie wydajności i buforowanie tak dużej ilości niestandardowych danych w terenie. Może również zapchać twoją bazę danych ogromną ilością niepotrzebnych niestandardowych danych pola, co utrudnia utrzymanie.
Nie jestem wielkim fanem przechowywania danych zserializowanych w niestandardowych polach, ponieważ nie można wyszukiwać ani zamawiać według danych szeregowych. Sugerowałbym jednak przechowywanie wszystkich identyfikatorów użytkowników w tablicy pod jednym niestandardowym polem. Możesz po prostu zaktualizować tablicę o identyfikator użytkownika, gdy użytkownik lubi post. Uzyskiwanie niestandardowych danych pola i zapętlanie tablicy identyfikatorów oraz robienie czegoś z identyfikatorami jest łatwe. Spójrz tylkoget_post_meta()
Aktualizacja pola niestandardowego jest również łatwa. W tym celu musisz zajrzeć update_post_meta()
, nie wiem, jak tworzysz własne pola, ale update_post_meta()
zdecydowanie jest to coś, czego chciałbyś użyć.
Jeśli musisz wysyłać e-maile lub powiadomienia push, gdy pole niestandardowe jest aktualizowane, masz do dyspozycji następujące zaczepy. ( Patrz update_metadata()
kontekst )
WNIOSEK
Tuż przed opublikowaniem tego ponownie, zanim przejdziesz do serializowanej trasy, upewnij się, że nie będziesz musiał sortować według posortowanych danych ani wyszukiwać określonych danych w serializowanych danych.