consulta repetida na coluna meta_value
-
Uma boa tarde a todos, este é meu primeiro post aqui na comunidade e gostaria da ajuda do pessoal que entende sobre Banco de dados do WordPress, já vasculhei a internet e não encontrei nada parecido com que estou precisando, bom no meu caso estou utilizando o wordpress limpo sem modificações e especificamente sem plug-ins pois este é o meu objetivo, porem não estou conseguindo resultados satisfatório, eu consigo gravar e excluir na tabela wp-usermeta, tenho vários campos meta_key com meta_value gravados de um único user_id porem quando faço uma consulta no campos da meta_key para que me retorne os valores de cada meta_value ele repete apena o primeiro resultado do meta_value e não listando os demais campos do mesmo user_id, gostaria de uma solução, se alguém puder ajudar ficarei grato…
-
Este tópico foi modificado 8 anos, 11 meses atrás por
dibritto.
-
Este tópico foi modificado 8 anos, 11 meses atrás por
-
Oi @dibritto,
Sua questão acabou ficando um pouquinho nebulosa. Vou explicar aqui os pontos que eu entendi e espero seu retorno, beleza?
– “estou utilizando o wordpress limpo sem modificações e especificamente sem plug-ins pois este é o meu objetivo”
Você está colocando essas consultas e gravações onde? Quando diz sem plugins, você quer dizer que não quer usar plugins prontos, é isso?– “eu consigo gravar e excluir na tabela wp-usermeta”
Você está usando as funções get_user_meta, update_user_meta e similares para isso, certo? Fazer esse acesso diretamente além de desnecessário é desaconselhável.– “ele repete apena o primeiro resultado do meta_value”
Como você está fazendo o acesso ao banco e como está iterando pelo resultado? O WordPress oferece a classe wpdb para acesso ao banco, já conhecia?Confesso que lendo seu tópico fiquei com a impressão de que você quer usar o WordPress apenas para estudo, certo? Para usos em produção é recomendado fortemente usar as funções nativas e não acessar o banco de dados diretamente, dessa forma você vai deixar seu código preparado para qualquer atualização que possa acontecer no WordPress, além de garantir integridade, dificultando uma edição indesejada em informações adicionadas por outros plugins ou pelo próprio WordPress.
Falta de manha neste editor, acho que o post foi para supervisão pelo motivo de varias edições, caso não liberarem posto novamente
eu quero que apareça para os usuários a seguinte tela:

Como pode ver os valores não estão sendo impresso como gostaria, de uma olhada como esta os valores na tabela wp_usermeta:

Como pode ver existe este problema no select do meta_value, este é o código que estou usando:
<?php // Lista os Usuarios que realizaram deposito $user_query = new WP_User_Query( array( 'meta_key' => 'ma_deposito', 'user_id' => 'ma_deposito', 'orderby' => 'meta_value', 'order' => 'ASC', 'number' => 10 ) );// coluna e valor da coluna // User Loop if ( ! empty( $user_query->results ) ) { echo('<div class="table-responsive">'); echo('<table class="table table-striped table-bordered table-hover table-condensed">'); echo('<tr>'); echo('<td class="active"><strong>Apelido</strong></td><td class="active"><strong>E-mail</strong></td><td class="active"><strong>Valor</strong></td>'); echo('</tr>'); foreach ( $user_query->results as $user ): echo('<tr>'); echo( '<td class="">'.$user->user_nicename.'</td><td class="">'.$user->user_email.'</td><td class="'.$user->ma_deposito_css.'">R$ ' . $user->ma_deposito .',00</td>'); echo('</tr>'); endforeach; echo('</tr>'); echo('</table>'); echo('<span class="pull-right"><strong>Total arrecadado:</strong> R$ '.$valortotal.',00 reais</span>'); echo('</div>'); } else { echo ' <div class="table-responsive"> <table class="table"> <tr> <td class="page-header alert alert-info text-center">Ainda não existe colaborações para este evento, seja o primeiro colaborador!. </td> </tr> </table> </div> ';}?>Procurando pela internet achei um usuário com o mesmo problema
Este é um projeto meu, um tema de arrecadação para WordPress que to fazendo do 0.
-
Esta resposta foi modificada 8 anos, 11 meses atrás por
dibritto. Razão: imagem incorreta
Oi @dibritto,
Algumas dicas:
– O parâmetrouser_idna array que cria oWP_User_Querynão existe, pode tirar;
– No foreach onde você itera sobre o resultado você vai precisar chamar outra função. AWP_User_Queryvai retornar os usuários que depositaram, mas não o valor mesmo. Experimente trocar o foreach pelo seguinte código:foreach ( $user_query->results as $user ): ?> <tr> <td><?php echo $user->user_nicename ?></td> <td><?php echo $user->user_email ?></td> <td class="<?php echo $user->ma_deposito_css ?>"> <?php $depositos = get_user_meta( $user->ID, 'ma_deposito' ); print_r( $depositos ); ?> </td> </tr> <?php endforeach;Agora a célula que exibia o valor vai exibir o array com os valores cadastrados. Veja se consegue iterar sobre os valores desses array para exibir só a soma. Não esqueça de voltar para contar se conseguiu evoluir, beleza?
Tirei os echos do trecho do código para melhorar a leitura. Se conseguir e quiser, troque no resto também 😉
Existe a possibilidade de fazer a exibição dos valores correspondente a cada entrada?

Oi @dibritto,
Tente usar o seguinte código:
foreach ( $user_query->results as $user ): ?> <tr> <td><?php echo $user->user_nicename ?></td> <td><?php echo $user->user_email ?></td> <td class="<?php echo $user->ma_deposito_css ?>"> <table> <?php $depositos = get_user_meta( $user->ID, 'ma_deposito' ); foreach ( $depositos as $deposito ) : ?> <tr> <td>R$ <?php echo $deposito; ?>,00</td> </tr> <?php endforeach; ?> </table> </td> </tr> <?php endforeach;Se não houver mais dúvidas não esqueça de voltar e marcar seu tópico como resolvido, ok?
Acho que me expressei mal, neste ultimo laço em que vc me mandou ele exibe o nick, email e os valores dos depositos, eu gostaria que cada deposito feito mostra-se seu respectivo valor como esta na imagem abaixo

Porem no campo valor exibe somente o primeiro valor do meta_value, se você observar na tabela existe deposito feito uma ou mais vezes pelo mesmo usuário, eu gostaria que sai-se de acordo com a tabela e seus valores, isso seria possível?
Oi @dibritto,
Se você precisar ordenar por depósito o melhor caminho vai ser fazer uma query no banco mesmo, usando a classe wpdb. Se você não precisar da ordenação dá pra alterar com o código que enviei por último.
Não tenho como mandar código agora, mas se você precisar usar a wpdb, é bem fácil. Monte uma query selecionando o valor do depósito e um LEFT JOIN com a tabela de usuários selecionando os campos que precisar. Na documentação tem vários exemplos de como usar a classe, qualquer dúvida é só voltar aqui.
@felipeelia com sua ajuda consegui montar uma query e um LEFT JOIN como citado por você, antes de mais nada quero agradecer pela sua cordial atenção e deixar um muito obrigado, vou deixar o código que montei ordenando corretamente os valores depositados de seus respectivos usuários.
<?php $sql_query =<<<SQL SELECT {$wpdb->users}.user_email, {$wpdb->users}.user_nicename, {$wpdb->usermeta}.meta_value FROM {$wpdb->users} LEFT JOIN {$wpdb->usermeta} ON {$wpdb->users}.ID = {$wpdb->usermeta}.user_id WHERE 1=1 AND {$wpdb->users}.user_status = '0' AND {$wpdb->usermeta}.meta_key = 'ma_deposito' /* AND {$wpdb->usermeta}.meta_value = '50'// busca meta_value pelo valor*/ SQL; $users = $wpdb->get_results($sql_query); //header('Content-type:text/plain'); // print_r($usersemails); foreach ( $users as $indce => $valor ) : echo 'Apelido: '. $valor->user_nicename . ' - E-mail: '. $valor->user_email. ' - Valor: '. $valor->meta_value.'<br />'; endforeach; ?> -
Esta resposta foi modificada 8 anos, 11 meses atrás por
O tópico ‘consulta repetida na coluna meta_value’ está fechado para novas respostas.