Suporte » Desenvolvendo com WordPress » consulta em tabela nativa WP

  • Resolvido luizarusso1

    (@luizarusso1)


    Fala, pessoal
    Minha dúvida é a seguinte: Existe algum bloqueio ou regra para select em tabelas nativas?

    Tenho o seguinte código em uma pagina.php:

    <?php 
        $connect = mysqli_connect("localhost", "user", "senha", "banco");  
    
        if (mysqli_connect_errno()){
            echo "Failed to connect to MySQL: " . mysqli_connect_error();
        }
    
        $query = "SELECT ID, post_title FROM wp_posts where post_type='product' and post_status='publish' ORDER BY post_title";  
        $result = mysqli_query($connect, $query);  
        $output = array();    
        while($row = mysqli_fetch_assoc($result)) 
        {  
            $output[] = $row;  
        }
        echo json_encode($output);  
    ?> 

    E ele não retorna nada, não da erro, mas também não exibe nada.
    Já se eu trocar a $query por: $query = "SELECT CodFilial, NomeFantasia, RazaoSocial, CNPJ FROM wp_escola WHERE Situacao='a' ORDER BY nomeFantasia ASC";

    ele me retorna o JSON normalmente (???)
    a única diferença que consegui identificar entre as duas é que wp_posts é uma tabela nativa enquanto wp_escolas eu quem criei…

    Alguém saberia o que pode ser? 🙁
    Obrigadaaaa

Visualizando 2 respostas - 1 até 2 (de um total de 2)
  • Moderador Felipe Elia

    (@felipeelia)

    Oi @luizarusso1,

    Você tem algum produto publicado no site? Tente excluir a cláusula WHERE inteira da primeira query para testar.

    De qualquer forma, não use queries assim no WordPress. Use a variável global $wpdb (e seu método get_results) porque ela já tem a conexão com o banco. Além disso evite colocar o prefixo “wp_” nas suas queries, porque este parâmetro pode mudar de instalação para instalação. Use a propriedade prefix da $wpdb.

    Resumindo, sua segunda query ficaria mais ou menos assim:

    global $wpdb;
    $results = $wpdb->get_results( "SELECT CodFilial, NomeFantasia, RazaoSocial, CNPJ FROM {$wpdb->prefix}escola WHERE Situacao='a' ORDER BY nomeFantasia ASC" );

    Se, por acaso, você está “fora” do ambiente WordPress veja se consegue incluí-lo como um framework (com um require_once para o arquivo wp-load.php). Caso esteja fazendo alguma coisa com ajax, use a API do WP (mais aqui, em português).

    Qualquer dúvida volte aqui que vamos tentando ajudar. Se conseguir resolver não esqueça de marcar seu tópico como resolvido.

    Bom dia, Felipe.
    Estive sem o meu pc, por isso não consegui testar antes. Só remover da clausula where em diante não rolou, eu tinha testado na sexta-feira, mas acabei de trocar o código acima por:

    <?php 
        global $wpdb;
        $results = $wpdb->get_results( "SELECT ID, post_title FROM {$wpdb->prefix}posts where post_type='product' and post_status='publish' ORDER BY post_title" );
        echo json_encode($results);  
    ?>  

    E funcionou! Muito obrigada.
    Vou marcar como resolvido e ler sobre a API que comentou.
    Valeu mesmooo

Visualizando 2 respostas - 1 até 2 (de um total de 2)
  • O tópico ‘consulta em tabela nativa WP’ está fechado para novas respostas.