it-swarm.com.de

Zeigen Sie vorgestellte Produkte über eine benutzerdefinierte Schleife im Woocommerce auf der Vorlagenseite an

Ich möchte 6 vorgestellte Produkte aus meinem Woocommerce-Shop auf meiner Homepage.php-Vorlage anzeigen. Nach einigen Recherchen stellte ich fest, dass der richtige Weg dies über eine benutzerdefinierte Schleife zu tun war. (Ich möchte keine Shortcodes verwenden, da ich zusätzliche Klassen für das Stylen usw. hinzufügen möchte.) Ich fand auch, dass der Schlüssel, den woocommerce für die verwendet Empfohlene Produkte ist '_featured'. Ich habe den folgenden Code zusammengestellt, um alle Produkte anzuzeigen, die ich als empfohlene Produkte in meinem Shop ausgewählt habe, aber es funktioniert nicht ... Jede Hilfe wird gebeten.

<?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(); 
?>
19
steamfunk

Ändere deine Argumente so:

$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
);

Wenn Sie zu wp-content/plugins/woocommerce/includes/class-wc-shortcodes.php (@ 595) gehen, können Sie nachlesen, wie dies für WC-Shortcodes gemacht wird.

16
Hooman Askari

Dies hat sich in WooCommerce 3.0 geändert. Es ist nicht nur eine meta_query, sondern enthält jetzt eine tax_query. Die Argumente sind jetzt:

    $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,
    );

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

20
dpruth

Vorgestellte Produkte Loop in 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();
?>
6
Mostafa Norzade

Laut dem WooCommerce Wiki :

Das Erstellen von benutzerdefinierten WP_Queries oder Datenbankabfragen [zum Abrufen von Produkten] kann Ihren Code beschädigen in zukünftigen Versionen von WooCommerce, wenn Daten für eine bessere Leistung in benutzerdefinierte Tabellen verschoben werden.

WooCommerce befürwortet die Verwendung von wc_get_products() oder WC_Product_Query() anstelle von WP_Query() oder get_posts().

Ich habe einen Beitrag mit dem Code geschrieben, mit dem ich erreicht habe, was Sie hier erreichen möchten: https://cfxdesign.com/create-a-custom-woocommerce-product-loop-the-right-way/

4
cfx

Basierend auf: https://github.com/woocommerce/woocommerce/wiki/wc_get_products-and-WC_Product_Query

Ich würde versuchen:

außenschleife:

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

 );

 $products = wc_get_products( $args );

in der Schleife:

$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();
1
conschneider

Ich weiß, dass dies ziemlich alt ist, aber ich habe gerade eine alternative Lösung vorgestellt hier und ich denke, sie kann auch dazu beitragen, dieses Thema zu erreichen.

Anstelle von meta_query oder tax_query können Sie auch wc_get_featured_product_ids () verwenden:

$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 );

Ich hoffe, es hilft!

1
Felipe Elia
<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();
               echo '<p>'.get_the_title().'</p>';
            endwhile;
        } else {
            echo __( 'No products found' );
        }
        wp_reset_postdata();
    ?>
</ul><!--/.products-->
0
Dhaval

wenn Sie einen Blick in die Datenbank in der Tabelle wp_postmeta werfen, werden Sie sehen, dass meta_key_featured und meta_valueyes oder no ist. Anstelle des Werts 0 oder 1 schreiben Sie yes oder 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;
?>
0
Aamer Shahzad