a partir de $product no WooCommerce
Eu já tinha vontade de publicar este guia há um tempão. Como Programador 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… Enfim, carregar informações de produto em uma página ou e-mail do WooCommerce. Espero que este artigo te faça economizar 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.
PÁRA TUDO! Você não sabe o que é um gancho (hook)?
Acesse o site da maior autoridade em WooCommerce: Eles próprios! Depois, continue lendo:
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 carregar 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) para carregar as informações de produto.
$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.
Carregar 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 carregar 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 podemos carregar informações de produto 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 do obeto $cart
Se o que você queria era alterar páginas do WooCommerce, te aconselho a ver a “Série de Guias Visuais de Hooks do WooCommerce“
seja o primeiro a comentar