Exibir produtos em destaque por meio de loop personalizado no woocommerce na página de modelo

16

Gostaria de exibir 6 produtos em destaque da minha loja de comércio eletrônico no meu modelo home-page.php. Depois de algumas pesquisas, descobri que a maneira correta de fazer isso era através de um loop personalizado (não desejo usar códigos de acesso porque gostaria de adicionar classes adicionais para estilo etc.). Também descobri que a chave que o woocommerce usa para o produtos em destaque é '_featured'. Eu juntei o código abaixo para exibir quaisquer produtos que eu escolhi para serem produtos em destaque em minha loja, mas isso não funciona ... Qualquer ajuda é apreciada.

<?php

    $args = array(
        'post_type'   => 'product',
        'stock'       => 1,
        'showposts'   => 6,
        'orderby'     => 'date',
        'order'       => 'DESC' ,
        'meta_query'  => array(
            array(
                'key'     => '_featured',
                'value'   => 0,
                'compare' => '>',
                'type'    => 'numeric'
            )
        )
    );

    $loop = new WP_Query( $args );
    while ( $loop->have_posts() ) : $loop->the_post(); global $product; ?>

        <li>    
            <?php 
                if ( has_post_thumbnail( $loop->post->ID ) ) 
                    echo get_the_post_thumbnail( $loop->post->ID, 'shop_catalog' ); 
                else 
                    echo '<img src="' . woocommerce_placeholder_img_src() . '" alt="Placeholder" width="65px" height="115px" />'; 
            ?>
            <h3><?php the_title(); ?></h3>

            <?php 
                echo $product->get_price_html(); 
                woocommerce_template_loop_add_to_cart( $loop->post, $product );
            ?>    
        </li>

<?php 
    endwhile;
    wp_reset_query(); 
?>
    
por steamfunk 23.07.2015 / 23:51

7 respostas

16

Altere seus argumentos para serem assim:

$meta_query   = WC()->query->get_meta_query();
$meta_query[] = array(
    'key'   => '_featured',
    'value' => 'yes'
);
$args = array(
    'post_type'   =>  'product',
    'stock'       =>  1,
    'showposts'   =>  6,
    'orderby'     =>  'date',
    'order'       =>  'DESC',
    'meta_query'  =>  $meta_query
);

Se você vai para o wp-content / plugins / woocommerce / includes / class-wc-shortcodes.php (@ 595), você pode descobrir como é feito para os códigos de acesso do WC.

    
por Hooman Askari 15.09.2015 / 12:52
17

Isso mudou no WooCommerce 3.0. Não é simplesmente um meta_query, mas agora inclui um tax_query. Os argumentos são agora:

    $meta_query  = WC()->query->get_meta_query();
    $tax_query   = WC()->query->get_tax_query();
    $tax_query[] = array(
        'taxonomy' => 'product_visibility',
        'field'    => 'name',
        'terms'    => 'featured',
        'operator' => 'IN',
    );

    $args = array(
        'post_type'           => 'product',
        'post_status'         => 'publish',
        'ignore_sticky_posts' => 1,
        'posts_per_page'      => $atts['per_page'],
        'orderby'             => $atts['orderby'],
        'order'               => $atts['order'],
        'meta_query'          => $meta_query,
        'tax_query'           => $tax_query,
    );

Veja woocommerce / includes / class-wc-shortcodes.php

    
por dpruth 08.05.2017 / 16:27
6

Produtos em destaque Loop no WooCommerce 3

<ul class="products">
<?php
$args = array(
    'post_type' => 'product',
    'posts_per_page' => 12,
    'tax_query' => array(
            array(
                'taxonomy' => 'product_visibility',
                'field'    => 'name',
                'terms'    => 'featured',
            ),
        ),
    );
$loop = new WP_Query( $args );
if ( $loop->have_posts() ) {
    while ( $loop->have_posts() ) : $loop->the_post();
        wc_get_template_part( 'content', 'product' );
    endwhile;
} else {
    echo __( 'No products found' );
}
wp_reset_postdata();
?>
    
por Mostafa Norzade 24.12.2017 / 08:59
1

De acordo com o Wiki do WooCommerce :

  

Criar consultas WP_Queries ou banco de dados personalizadas [para recuperar produtos] provavelmente quebrará seu código em versões futuras do WooCommerce à medida que os dados forem sendo movidos para tabelas personalizadas para melhor desempenho.

O WooCommerce defende o uso de wc_get_products() ou WC_Product_Query() em vez de WP_Query() ou get_posts() .

Eu escrevi um post com o código que usei para alcançar o que você deseja aqui: enlace

    
por cfx 24.05.2018 / 20:58
1

Com base em: enlace

Eu tentaria:

loop externo

:

$args = array (
'limit' => 6,
'orderby' => 'title',
'order' => 'ASC',
'category' => $club_cat,
'stock_status' => 'instock',
'featured' => true,

 );

 $products = wc_get_products( $args );

no loop:

$query = new WC_Product_Query( array(
'limit' => 6,
'orderby' => 'title',
'order' => 'ASC',
'category' => $club_cat,
'stock_status' => 'instock',
'featured' => true,
'return' => 'ids',

 ) );

 $products = $query->get_products();
    
por conschneider 26.09.2018 / 14:09
0

se você der uma olhada no banco de dados na tabela wp_postmeta , verá meta_key será _featured e meta_value será yes ou no so em vez do valor 0 ou 1 write yes ou no

<?php
    $q = new WP_Query([
      'post_type'   =>  'product',
      'stock'       =>  1,
      'showposts'   =>  3,
      'orderby'     =>  'date',
      'order'       =>  'DESC',
      'meta_query'  =>  [ 
        ['key' => '_featured', 'value' => 'yes' ]
        ]
    ]);
    if ( $q->have_posts() ) :
        while ( $q->have_posts() ) : $q->the_post();
            // display product info
        endwhile; wp_reset_query();
    endif;
?>
    
por Aamer Shahzad 11.07.2016 / 22:02
0

Eu sei que isso é bem antigo, mas acabei de compartilhar uma solução alternativa aqui e acho que isso pode ajudar aqueles que atingem este tópico também.

Em vez de usar meta_query ou tax_query , você pode usar wc_get_featured_product_ids () também:

$args = array(
    'post_type'           => 'product',
    'posts_per_page'      => 6,
    'orderby'             => 'date',
    'order'               => 'DESC',
    'post__in'            => wc_get_featured_product_ids(),
);

$query = new WP_Query( $args );

Espero que ajude!

    
por Felipe Elia 29.04.2018 / 00:14