É bastante difícil responder concretamente à sua pergunta. A primeira parte é fácil. Recentemente, fiz algo semelhante no stackoverflow
As meta chaves são comparadas e correspondem exatamente. WP_Query
não temos como ajustar esse comportamento com um parâmetro simples, mas sempre podemos nos apresentar e ajustar a posts_where
cláusula para fazer uma LIKE
comparação nas meta-chaves.
O FILTRO
Este é apenas um filtro básico, ajuste-o conforme necessário.
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 você pode ver, o filtro é acionado apenas quando definimos nosso novo parâmetro personalizado, wildcard_on_key
como true
. Quando isso ocorre, simplesmente mudamos o =
comparador para o LIKE
comparador
Apenas uma observação, LIKE
comparações são inerentemente mais caras do que outras comparações
A PERGUNTA
Você pode simplesmente consultar suas postagens da seguinte forma para obter todas as postagens com meta chaves like_status_{user_id}
$args = [
'wildcard_on_key' => true,
'meta_query' => [
[
'key' => 'like_status_',
'value' => 1,
]
]
];
$query = new WP_Query( $args );
OUTRA QUESTÃO
Os campos personalizados não têm impacto no desempenho. Você pode ler minha postagem sobre este assunto aqui . No entanto, estou preocupado com o fato de você dizer que cada post pode ter centenas ou milhares de curtidas. Isso pode afetar a obtenção e o armazenamento em cache de uma quantidade tão grande de dados de campo personalizados. Ele também pode entupir seu banco de dados com uma enorme quantidade de dados de campo personalizados desnecessários, o que dificulta a manutenção.
Não sou muito fã de armazenar dados serializados em campos personalizados, pois não é possível pesquisar ou solicitar dados serializados. No entanto, eu sugeriria o armazenamento de todos os IDs de usuário em uma matriz em um campo personalizado. Você pode simplesmente atualizar a matriz com o ID do usuário quando um usuário gosta de uma postagem. É fácil obter os dados do campo personalizado e fazer um loop sobre a matriz de IDs e fazer algo com as IDs. Basta dar uma olhadaget_post_meta()
A atualização de um campo personalizado também é fácil. Para isso, você precisará analisar update_post_meta()
, não sei como criar seus campos personalizados, mas update_post_meta()
é definitivamente algo que você gostaria de usar.
Se você precisar enviar e-mails ou notificações por push quando um campo personalizado for atualizado, você terá os seguintes ganchos disponíveis para trabalhar. ( Veja update_metadata()
para o contexto )
CONCLUSÃO
Pouco antes de postar isso, novamente, antes de seguir a rota serializada, verifique se você não precisa classificar pelos dados classificados ou procurar dados específicos dentro dos dados serializados.