Buclă personalizată Woocommerce pentru afișarea tuturor produselor
În prezent lucrez la un site de ecommerce și am întâmpinat o problemă. Clientul meu dorește o pagină e-boutique cu toate categoriile de produse afișate, urmată de trei produse promovate și un buton "arată toate".
Acest buton "Arată toate" ar trebui să afișeze toate produsele pe care le conține magazinul cu sortarea și paginarea implicită WooCommerce.
În primul rând, nu știu dacă procedez corect. Până acum am pagina care arată categoriile de produse și când fac click pe butonul "arată toate", reîncarc pagina cu un argument GET
/?all=1
și am produsele afișate.
<a class="product-category-view-all" href="?all=1"><?php _e('Vezi toate'); ?></a>
Am copiat ideea din această postare, și aici este codul meu:
<div id="content" class="hfeed">
<h1><?php _e('E-boutique'); ?></h1>
<?php
if (isset($_GET['all']))
{
$args = array(
'post_type' => 'product',
'orderby' => $orderby,
);
$wp_query = new WP_Query($args);
?>
<?php do_action('woocommerce_before_shop_loop'); // sortare woocommerce ?>
<div class="clear"></div>
<ul class="products-list">
<?php woocommerce_product_subcategories(); ?>
<?php while ($wp_query->have_posts()) : $wp_query->the_post(); ?>
<?php woocommerce_get_template_part('content', 'product'); ?>
<?php
endwhile; // sfârșitul buclei
wp_reset_query();
?>
</ul>
<div class="clear"></div>
<?php do_action('woocommerce_after_shop_loop'); // paginare woocommerce ?>
<?php
}
else
{
// Cod pentru afișarea categoriilor de produse cu miniaturi.
}
?>
Produsele sunt bine afișate și selectorul pentru sortare este vizibil. Când vreau să schimb sortarea, pagina este reîncărcată dar ordinea nu se schimbă și paginarea este setată la 3 produse per pagină dar nu este respectată. (butoanele de paginare nu sunt afișate).
Aș dori să adaug că este primul meu website folosind WordPress și WooCommerce.
Nu am rezolvat în întregime problema mea. Clientul meu și-a schimbat părerea și nu a mai dorit sortarea.
În ceea ce privește paginarea, am reușit să o fac să funcționeze prin adăugarea unui nou argument în interogarea mea, iată codul care a funcționat pentru mine:
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
'post_type' => 'product',
'paged' => $paged,
);
$wp_query = new WP_Query($args);
if (isset($_GET['all']))
{
?>
<?php do_action('woocommerce_archive_description'); ?>
<?php if (have_posts()) : ?>
<?php
// Nu mai vreau sortarea
//do_action('woocommerce_before_shop_loop');
?>
<ul class = "products-list">
<?php while (have_posts()) : the_post(); ?>
<?php woocommerce_get_template_part('content', 'product'); ?>
<?php endwhile; // sfârșitul buclei. ?>
</ul>
<?php
/* paginare woocommerce */
do_action('woocommerce_after_shop_loop');
?>
<?php elseif (!woocommerce_product_subcategories(array('before' => woocommerce_product_loop_start(false), 'after' => woocommerce_product_loop_end(false)))) : ?>
<?php woocommerce_get_template('loop/no-products-found.php'); ?>
<?php endif; ?>
<?php
}
else
{
// Cod pentru afișarea categoriilor de produse cu imagini miniatură.
}
?>
Variabila $paged
mă ajută să obțin pagina curentă transmisă în URL prin GET.
Din nou, nu știu dacă este cea mai bună metodă de a face acest lucru. Dar a funcționat pentru mine.
Sper că poate ajuta pe cineva.

woocommerce_get_template_part
este învechit începând cu versiunea 3.0 ... folosește wc_get_template_part
în loc ... De asemenea, poți folosi o instrucțiune if pentru a face ca codul tău să funcționeze atât cu versiuni mai vechi, cât și cu cele mai noi de woocommerce
