• Resolvido dibritto

    (@dibritto)


    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.
Visualizando 9 respostas - 1 até 9 (de um total de 9)
  • Moderador Felipe Elia

    (@felipeelia)

    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.

    Criador do tópico dibritto

    (@dibritto)

    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

    Criador do tópico dibritto

    (@dibritto)

    eu quero que apareça para os usuários a seguinte tela:
    pagina

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

    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

    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
    Moderador Felipe Elia

    (@felipeelia)

    Oi @dibritto,

    Algumas dicas:
    – O parâmetro user_id na array que cria o WP_User_Query não existe, pode tirar;
    – No foreach onde você itera sobre o resultado você vai precisar chamar outra função. A WP_User_Query vai 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 😉

    Criador do tópico dibritto

    (@dibritto)

    Existe a possibilidade de fazer a exibição dos valores correspondente a cada entrada?

    Moderador Felipe Elia

    (@felipeelia)

    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?

    Criador do tópico dibritto

    (@dibritto)

    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?

    Moderador Felipe Elia

    (@felipeelia)

    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.

    Criador do tópico dibritto

    (@dibritto)

    @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;
       ?>
Visualizando 9 respostas - 1 até 9 (de um total de 9)

O tópico ‘consulta repetida na coluna meta_value’ está fechado para novas respostas.