web-dev-qa-db-fra.com

récupérer la vignette de l'ID de publication du produit le plus vendu dans la catégorie

Le code ci-dessous affiche les noms des catégories de produits, les liens et leurs miniatures en survol. Les miniatures ($ image) récupérées sont celles définies manuellement via le menu des catégories de produits woocommerce.

J'essaie plutôt d'obtenir ces miniatures de catégories de produits à partir du produit le plus vendu de chacune. Je ne sais vraiment pas comment inclure de nouveaux wp_query et get_post_meta à cela. Avec cet ajout, mes vignettes ne s'affichent plus du tout.

$max_cat_count = 24; 
$qty_per_column = 6; 


$args = array(
    'taxonomy'   => 'product_cat',
    'number'     => $max_cat_count + 1, // keep the + 1
    'hide_empty' => 0,
);

$get_cats = get_terms( $args );
$get_cats = ( ! is_wp_error( $get_cats ) ) ? $get_cats : [];

$total = count( $get_cats );
$list_number = 1;
$_new_col = false;

$columns = '';
foreach ( $get_cats as $i => $cat ) {
    if ( $i >= $max_cat_count ) {
        break;
    }

    if ( $i % $qty_per_column === 0 ) {
        if ( $_new_col ) {
            $columns .= '</ul></div><!-- .cat_columns -->';
        }

        $id = 'cat-col-' . $list_number;
        $columns .= '<div class="menu cat_columns" id="' . $id . '">';
        $columns .= '<ul class="hoverimage">';

        $_new_col = true;
        $list_number++;
    }

    if ( $total > $max_cat_count && $i === $max_cat_count - 1 ) {
        $columns .= '<li class="all-link"><a href="/view-all">View All </a></li>'; 
    } else {

     $terms = get_terms( 'product_cat', array(
    'hide_empty' => false,
) );

foreach ( $terms as $term ) {
    $query = new WP_Query( [
        'post_type'      => 'product',
        'posts_per_page' => 1,
        'meta_key'       => 'total_sales',
        'orderby'        => 'meta_value_num',
        'tax_query'      => array(
            array(
                'taxonomy' => 'product_cat',
                'field'    => 'slug',
                'terms'    => $term->slug,
            ),
        ),
    ] );
    if ( $query->have_posts() ) {
        while ( $query->have_posts() ) {
            $query->the_post();
            $thumbnail = content_url( '/uploads/woocommerce-placeholder-416x416.png' );
            if ( has_post_thumbnail() ) {
                $thumbnail = get_post_thumbnail_id();
                $image = $thumbnail ? wp_get_attachment_url( $thumbnail ) : '';
            }
        }
    }

        wp_reset_postdata();  
}
            $link = '<a href="' . esc_url( get_term_link( $cat ) ) . '">' . esc_html( $cat->name ) . '</a>';
            $columns .= '<li class="menu-item" data-image="' . esc_url( $image ) . '">' . $link . '</li>';
}
}

// Close last column, if any.
if ( $_new_col ) {
    $columns .= '</ul></div><!-- .cat_columns -->';
}
?>
3
Whee

Ce que j'ai compris de votre question, c'est que vous voulez obtenir le produit le plus vendu dans chaque catégorie et définir son image en tant que pouce de catégorie.

vous devrez parcourir toutes les catégories, puis vous aurez également besoin d'une boucle imbriquée dans chaque catégorie pour le meilleur produit dans la boucle de catégories actuelle, puis vous aurez accès à l'image du produit le plus vendu.

le code suivant en décrira plus (non testé):


$terms = get_terms( 'product_cat', array(
    'hide_empty' => false,
) );

foreach ( $terms as $term ) {
    $query = new WP_Query( [
        'post_type'      => 'product',
        'posts_per_page' => 1,
        'meta_key'       => 'total_sales',
        'orderby'        => 'meta_value_num',
        'tax_query'      => array(
            array(
                'taxonomy' => 'product_cat',
                'field'    => 'slug',
                'terms'    => $term->slug,
            ),
        ),
    ] );
    if ( $query->have_posts() ) {
        while ( $query->have_posts() ) {
            $query->the_post();
            $thumbnail = 'DEFAULT THUMBNAIL ID';
            if ( has_post_thumbnail() ) {
                $thumbnail = get_post_thumbnail_id();
                //THEN YOU WILL BE ABLE TO SET THE CATEGORY THUMBNAIL WITH THIS PRODUCT THUMBNAIL ID
            }
        }
    }
    wp_reset_postdata();
}
2
Ahmad Wael

Ce que j'ai compris de votre question, c'est que vous voulez afficher l'image de la catégorie des produits les plus vendus. Dans ce cas, vous devez parcourir votre produit WP_Query .. Comme vous l'avez écrit et chaque boucle utilise simplement la fonction wp_get_object_terms. Il renverra la catégorie de produit qui lui est associée. J'espère que cela vous aidera.

2
Pradipta Sarkar