Carregar informações de produto a partir de $product no WooCommerce

Eu já tinha vontade de publicar este guia há um tempão. Como Desenvolvedor freelancer para WooCommerce, todos os dias repito muitas operações que me fazem perder tempo… e uma delas é de fato “Como obter ____ se eu tiver a variável/objeto $product?”.

Por exemplo, “Como posso obter o SKU do produto“? Ou “Como posso obter a descrição curta do produto”? Ou talvez o nível de estoque do produto, classe de envio, classe de imposto, preço, preço normal, preço promocional e assim por diante… espero que este artigo economize seu tempo.

Claro, nem sempre você tem acesso à variável $product (no caso, quando em alguns hooks tipo filter do WooCommerce, por exemplo), então você também é obrigado a entender o seu cenário e ver se consegue “pegar” esse objeto $product em outro caminho ou criá-lo bem ali.

Por exemplo, você pode saber o $product_id. Nesse caso, você deve encontrar uma maneira de “obter o objeto $product através do $product_id” – vou te mostrar um exemplo abaixo.

Outros exemplos podem ser o pedido ou as páginas do carrinho. Mais uma vez, aqui você realmente não tem um produto $ disponível, então você tem que percorrer os itens do pedido/carrinho e “obtê-lo”. Depois disso, você pode calcular e obter qualquer informação necessária de $product. Aproveite!

1. Quando você tem acesso à variável $product​

Ganchos (do_action e apply_filters) usam argumentos adicionais que são passados para a função. Se eles permitirem que você use o objeto “$product”, você está com a faca e o queijo nas mãos. Como alternativa, você pode declarar a variável global “$product” dentro de sua função.

Em ambos os casos, veja como obter todas as informações do produto:

// Get Product ID
  
$product->get_id();
  
// Get Product General Info
  
$product->get_type();
$product->is_type( $type )
$product->get_name();
$product->get_slug();
$product->get_date_created();
$product->get_date_modified();
$product->get_status();
$product->get_featured();
$product->get_catalog_visibility();
$product->get_description();
$product->get_short_description();
$product->get_sku();
$product->get_menu_order();
$product->get_virtual();
get_permalink( $product->get_id() );
$product->get_title();
$product->is_visible();
$product->is_featured();
$product->is_on_sale();
$product->has_child();
  
// Get Product Prices
  
$product->get_price();
$product->get_regular_price();
$product->get_sale_price();
$product->get_date_on_sale_from();
$product->get_date_on_sale_to();
$product->get_total_sales();
$product->get_price_html();
$product->get_variation_price( 'min', true );
$product->get_variation_price( 'max', true );
$product->get_variation_regular_price( 'min', true );
$product->get_variation_regular_price( 'max', true );
  
// Get Product Tax, Shipping & Stock
  
$product->get_tax_status();
$product->get_tax_class();
$product->get_manage_stock();
$product->get_stock_quantity();
$product->get_stock_status();
$product->get_backorders();
$product->get_sold_individually();
$product->get_purchase_note();
$product->get_shipping_class_id();
  
// Get Product Dimensions
  
$product->get_weight();
$product->get_length();
$product->get_width();
$product->get_height();
$product->get_dimensions();
  
// Get Linked Products
  
$product->get_upsell_ids();
$product->get_cross_sell_ids();
$product->get_parent_id();
  
// Get Product Variations and Attributes
 
$product->get_children(); // get variations
$product->get_attributes();
$product->get_default_attributes();
$product->get_attribute( 'attributeid' ); //get specific attribute value
  
// Get Product Taxonomies
  
$product->get_categories();
$product->get_category_ids();
$product->get_tag_ids();
wc_get_product_category_list( $product->get_id()
  
// Get Product Downloads
  
$product->get_downloads();
$product->get_download_expiry();
$product->get_downloadable();
$product->get_download_limit();
  
// Get Product Images
  
$product->get_image_id();
$product->get_image();
$product->get_gallery_image_ids();
  
// Get Product Reviews
  
$product->get_reviews_allowed();
$product->get_rating_counts();
$product->get_average_rating();
$product->get_review_count();
Informações contidas na variável $product

2. Você tem acesso ao id do produto $product_id

Se você tiver acesso ao ID do produto (mais uma vez, geralmente do_action ou apply_filters tornarão isso possível para você), você deve obter o objeto do produto primeiro. Em seguida, faça exatamente as mesmas coisas das instruções em 1 (acima).

$product = wc_get_product( $product_id );
  
// agora você tem acesso às funções mencionadas acima...
  
$product->get_type();
$product->get_name();
$product->get_slug();
// etc.
Obtenha o objeto $product com o ID do produto

3. Você tem acesso ao objeto Order ou o id do pedido

Como obter as informações do produto dentro do Pedido? Nesse caso, você precisará percorrer todos os itens presentes no pedido e aplicar as regras mencionadas acima.

$order = wc_get_order( $order_id );
$items = $order->get_items();
  
foreach ( $items as $item ) {
  
    $product = $item->get_product();
  
    // Aqui você tem acesso às funções mencionadas no 1 acima...
  
    $product->get_type();
    $product->get_name();
    // etc.
  
}
Puxar o objeto $product de cada produto a partir do objeto $order ou o id do pedido

4. Você tem acesso ao objeto Cart

Como obter as informações do produto dentro do Carrinho? Nesse caso, mais uma vez, você precisará percorrer todos os itens presentes no carrinho e aplicar as regras de lá de cima.

$cart = WC()->cart->get_cart();
  
foreach( $cart as $cart_item_key => $cart_item ){
  
    $product = $cart_item['data'];
  
    // Agora você tem acesso às funções mencionadas no 1 acima...
  
    $product->get_type();
    $product->get_name();
    // etc.
  
}
Puxar o objeto $product do obeto $cart

5. Você tem acesso ao objeto $post

Em certos casos (por exemplo, no back-end), você só pode obter acesso a $post. Então, como “calculamos” $product a partir de $post? Moleza:

$product = wc_get_product( $post );
  
// Aqui você tem acesso às funções mencionadas no 1 acima...
  
$product->get_type();
$product->get_name();
// etc.
Puxar o objeto $product a partir do objeto $post
Rafa Carvalhido Escrito por:

Rafa é Programador Web especializado em WordPress + WooCommerce e escritor nos tempos livres. Criação de sites, otimizações de velocidade e SEO, e criação de plugins são algumas de suas funções rotineiras que lhe permitem falar com propriedade quando o assunto é WordPress.

seja o primeiro a comentar

    Deixe um comentário

    O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *