Obter ID do produto a partir do ID do pedido no Woocommerce [fechado]

38

Estou tendo problemas com os detalhes do produto Woocommerce e o relacionamento com os detalhes do pedido. Não consigo encontrar o ID do produto de um ID de pedido relacionado na página Visualizar pedidos do tema Woocommerce. Eu simplesmente quero obter o conteúdo do produto e o link permanente etc. na página Visualizar pedidos .

Tentei procurar, wp_postmetamas não tive sorte.

arslaan ejaz
fonte

Respostas:

68

WooCommerce 3.0+

você pode obter os itens de um pedido

$order = wc_get_order( $order_id );
$items = $order->get_items();

se você percorrer os itens, poderá obter todos os dados relevantes:

foreach ( $items as $item ) {
    $product_name = $item->get_name();
    $product_id = $item->get_product_id();
    $product_variation_id = $item->get_variation_id();
}

uma boa dica é verificar como as páginas de pedidos do administrador obtêm os dados, você encontrará muitas respostas lá!

Pré-WooCommerce 3.0

$order = new WC_Order( $order_id );
$items = $order->get_items();
foreach ( $items as $item ) {
    $product_name = $item['name'];
    $product_id = $item['product_id'];
    $product_variation_id = $item['variation_id'];
}
Ewout
fonte
A menos que eu estou faltando alguma coisa, isso não parece trabalho na versão mais recente do WooCommerce ...
rnevius
Ainda funciona no WooCommerce 2.4.8 para mim, mas você precisa ter a variável $ order_id definida (às vezes está em $ order-> id, dependendo do seu contexto).
Ewout
@mevius i acrescentou uma edição para 3+ com uma função de envio para a verificação vários produtos
Garet Claborn
ver editar história de despachante, isso não é bom sem ele como ele vai comer o seu servidor inutilmente
Garet Claborn
@GaretClaborn que depende inteiramente do que você está fazendo com esses dados. 'como está', este trecho de exemplo não desperdiça memória de forma alguma.
Ewout
6

Eu trabalhei nisso e consegui alguma coisa. Que eu gostaria de compartilhar com outros desenvolvedores. Esta não é a maneira preferida de fazê-lo, mas, por conhecimento, estou postando minha resposta.

global $wpdb;
            $result = $wpdb->get_results('select t1.order_item_id, t2.* FROM 
            wp_woocommerce_order_items as t1 JOIN wp_woocommerce_order_itemmeta as t2 ON t1.order_item_id = t2.order_item_id
            where t1.order_id='.$order->ID);
            echo '<pre>';
            print_r($result);
            echo '</pre>'; 

a esperança ajudará alguém.

Além disso:

Melhor usar o prefixo da tabela wordpress para evitar problemas em vários sites ou na migração etc.

global $wpdb;
$table_name = $wpdb->prefix . 'table_name'; 
arslaan ejaz
fonte
1
@ErenorPaz Obrigado, eu adicionei o conteúdo em resposta, em resposta ao seu comentário :)
Arslaan ejaz
Obrigado pela resposta rápida, mesmo em um tópico antigo! Eu vou apagar os meus comentários anteriores, uma vez que está desatualizado agora :)
Erenor Paz