web-dev-qa-db-fra.com

Afficher tous les produits sur une page avec WooCommerce

J'ai WooCommerce en cours d'exécution sur ce magasin .

Bien que la valeur par défaut soit d'afficher 12 produits sur une page, le client a demandé un bouton "Tout afficher" qui évitera à l'utilisateur de recourir à la pagination pour accéder aux autres produits.

Existe-t-il une fonction que je peux exécuter sur la page actuelle qui relance la boucle mais modifie la requête pour donner plus de 'publications par page'? Les fichiers de modèle WooCommerce ont piqué de sens, mais la façon dont cela est fait n'est pas évident.

Je pensais passer une variable php GET à la page actuelle et le tester pour déterminer s'il fallait exécuter la requête modifiée, comme ceci (en dehors de la boucle):

<a href="<?php 
echo get_permalink( $post->ID ) . "?showall=1"; 
?>">Show all</a>

Et puis avoir quelque chose comme ça avant la boucle de fichiers de modèle

<?php if($_GET['showall'] = 1){ //something here to modify the query (wp_query perhaps?? or a woocommerce filter) } ?>
//the loop as normal

Suis-je sur la bonne voie? Est-ce quelque chose qui est facile à réaliser de cette façon? Toute orientation sur la mise en œuvre serait appréciée.

Edit: OK J'ai eu un peu plus de mal à utiliser les modèles WooCommerce. archive-product.php est le fichier que je voudrais remplacer.

Maintenant, je spécifie déjà les produits par page avec un filtre dans le functions.php de mon thème, comme ci-dessous:

add_filter( 'loop_shop_per_page', create_function( '$cols', 'return 12;' ), 20 );

Et j'ai ajouté cette ligne dans le fichier archive-product.php que j'ai copié dans my theme folder/woocommerce pour remplacer la valeur par défaut:

        <?php if($_GET['showall']==1){ 
            add_filter( 'loop_shop_per_page', create_function( '$cols', 'return 8;' ), 30 ); 
        } ?>

Lorsque je visite ensuite shop_page/?showall=1, le filtre ne parvient pas à s'exécuter. Le filtre dans functions.php semble dominer malgré une priorité plus basse.

4
harryg

Ajoutez simplement la vérification conditionnelle à votre fichier functions.php:

if( isset( $_GET['showall'] ) ){ 
    add_filter( 'loop_shop_per_page', create_function( '$cols', 'return -1;' ) ); 
} else {
    add_filter( 'loop_shop_per_page', create_function( '$cols', 'return 12;' ) );
}
5
Milo

En retard pour la fête, mais si vous n'avez pas à tenir compte de PHP 5.2, il est plus sûr et plus efficace d'utiliser une fermeture:

add_filter( 'loop_shop_per_page', function ( $cols ) {
    return - 1;
} );

(Voir manuel php sur create_function.)

2
Caspar

Il suffit de lire votre sujet,

J'ai créé un plugin autour de cela pour créer une liste déroulante permettant au visiteur de sélectionner le nombre de produits qu'il souhaite voir.

http://wordpress.org/plugins/woocommerce-products-per-page/

J'espère que vous pourrez utiliser ceci dans votre situation.

1
Sormano