• Resolvido taynanps

    (@taynanps)


    Bom dia comunidade,

    Estou trabalhando com a api do woocommerce e extraindo dados dos produtos que estão cadastrados, mas ele não retorna todos os dados.
    Tenho um plugin que gerencia vendedores e gostaria que a consulta aos produtos me retornasse o nome do author do produto.

Visualizando 15 respostas - 1 até 15 (de um total de 22)
  • Moderador Mário Valney

    (@mariovalney)

    WordPress Cleric of Fire

    Olá, tudo bem?

    Você pode usar a API REST do WordPress e pegar os dados do Product usando o ID que é o ID do post ou, o mais recomendado, alterar a API do WooCommerce para voltar os dados que você quer.

    Acho que o filtro woocommerce_rest_prepare_product_object pode ser usado para isso.

    Abraços

    Criador do tópico taynanps

    (@taynanps)

    Tudo bem e com vc? Obrigado pela resposta Mário.
    No caso eu teria que alterar a função ou chamar pra aplicar esse filtro?

    Pensei que teria que alterar a prepare_objects_query

    Moderador Mário Valney

    (@mariovalney)

    WordPress Cleric of Fire

    Um filtro é quando você pode alterar um valor via algum callback.

    Como a função apply_filters passa 3 parâmetros pro seu filtro, você precisará adicionar um filtro assim:

    function example_callback( $response, $object, $request ) {
        // (maybe) modify $response
        return $response;
    }
    add_filter( 'woocommerce_rest_prepare_product_object', 'example_callback', 10, 3 );
    • Esta resposta foi modificada 7 anos, 9 meses atrás por Mário Valney.
    • Esta resposta foi modificada 7 anos, 9 meses atrás por Mário Valney.
    Criador do tópico taynanps

    (@taynanps)

    E eu crio esse filtro nesse controller mesmo?

    Moderador Mário Valney

    (@mariovalney)

    WordPress Cleric of Fire

    Não. Nunca altere os arquivos do Core ou de plugins.

    Como você disse que tinha um plugin julguei que era o desenvolvedor, desculpe.

    Explicando melhor: o filtro vai servir para alterar o valor que passa por ele, para isso você recebe o próprio valor e mais 2 parâmetros na função do filtro. Com isso tudo, você deve tentar ver como modificar $response para incluir também os valores que você quer receber via API.

    Sobre onde incluir o código: você pode incluir esse código no seu Tema ou em algum plugin que tenha criado para esse site e que faça sentido.

    Abraços

    • Esta resposta foi modificada 7 anos, 9 meses atrás por Mário Valney.
    • Esta resposta foi modificada 7 anos, 9 meses atrás por Mário Valney.
    Criador do tópico taynanps

    (@taynanps)

    Boa tarde Mario, obrigado pela resposta e pela explicação. Fiz o seguinte filtro:

    add_filter( 'woocommerce_rest_prepare_product_object', 'custom_products_api_data', 90, 2 );
    function custom_products_api_data( $response, $post ) {
        
        // retrieve a custom field and add it to API response
        $response->data['autor'] = get_post_meta( $post->ID, 'post_author', true );
        return $response;
    
    }

    Ele alterou a resposta e adicionou esse campo, mas ele retornou ["autor"]=> bool(false)

    Quer dizer que esse campo pode estar identificado de outra maneira?
    Encontrei essa linha no plugin que usei:

    
    $seller = get_user_by( 'id', $product->post->post_author );

    Que seria a identificação do vendedor.

    Moderador Mário Valney

    (@mariovalney)

    WordPress Cleric of Fire

    Olá, basta dar um print_r ou um var_dump no $post que você vai ver qual o objeto e as propriedades.

    Não testei, mas creio que basta usar $post->post_author.

    Agora se quiser o objeto do User pode usar a função get_userdata assim: $seller_data = get_userdata( $post->post_author ); e aí procura pela documentação no WordPress e/ou dá um print pra ver as propriedades do objeto. Provavelmente $seller_data->display_name é o que você procura.

    Criador do tópico taynanps

    (@taynanps)

    Onde faço esse print? Não da pra ser no filtro né?

    Moderador Mário Valney

    (@mariovalney)

    WordPress Cleric of Fire

    Tem que ser no filtro, não é lá que tem a variável que você quer debbugar?
    Vai quebrar, mas beleza: só queremos ver como ela é.

    “Não quero quebrar o código” – Então podemos usar o log do WordPress para imprimir lá: https://www.elegantthemes.com/blog/tips-tricks/using-the-wordpress-debug-log

    Abraços

    Criador do tópico taynanps

    (@taynanps)

    É que não consigo ver esse dump por causa do erro.

    Moderador Mário Valney

    (@mariovalney)

    WordPress Cleric of Fire

    Tende o debug então.

    Mas que erro? Você não falou de erro.

    Criador do tópico taynanps

    (@taynanps)

    Quando coloco o dump no filtro ele retorna no get da api do wc um erro de syntax.

    Moderador Mário Valney

    (@mariovalney)

    WordPress Cleric of Fire

    Sim sim. Ele vai imprimir o objeto então a resposta vai estar quebrada, mas vai ser justamente o objeto impresso no meio do JSON.

    De qualquer forma, pode sempre tentar o outro modo: imprimir num arquivo de Log.

    Mas voltando ao seu problema, isso deve resolver:

    $seller_data = get_userdata( $post->post_author );
    $response->data['author_name'] = $seller_data->display_name;
    Criador do tópico taynanps

    (@taynanps)

    Dessa vez retornou NULL, mas os produtos tem pelo menos o administrador como autor.

    Moderador Mário Valney

    (@mariovalney)

    WordPress Cleric of Fire

    @taynanps você precisa ir debugando até conseguir a informação que deseja adicionar ao $response.

    Infelizmente não tenho como fazer isso por você. Já lhe dei todo o caminho.

    Caso tenha dúvidas, é só retornar.
    Abraços

    • Esta resposta foi modificada 7 anos, 9 meses atrás por Mário Valney.
Visualizando 15 respostas - 1 até 15 (de um total de 22)
  • O tópico ‘Consultar autor do produto – Woocommerce API’ está fechado para novas respostas.