Mostrar todos los productos en una página con WooCommerce

26 feb 2013, 00:01:46
Vistas: 59.5K
Votos: 4

Tengo WooCommerce funcionando en esta tienda.

Aunque por defecto se muestran 12 productos por página, el cliente ha solicitado un botón "mostrar todo" que evite que el usuario tenga que usar la paginación para ver los demás productos.

¿Existe alguna función que pueda ejecutar en la página actual que vuelva a ejecutar el loop pero cambie la consulta para mostrar más 'posts por página'? He estado investigando los archivos de plantilla de WooCommerce pero no es obvio cómo se hace esto.

Estaba pensando en pasar una variable GET de PHP a la página actual y simplemente comprobarla para determinar si ejecutar la consulta modificada, así (fuera del loop):

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

Y luego tener algo como esto antes del loop de los archivos de plantilla

<?php if($_GET['showall'] = 1){ //algo aquí para modificar la consulta (¿wp_query tal vez? o un filtro de woocommerce) } ?>
//el loop como siempre

¿Estoy en el camino correcto? ¿Es algo fácil de lograr de esta manera? Agradecería cualquier orientación sobre cómo implementarlo.

Edición: OK, he investigado un poco más los templates de WooCommerce. Parece que archive-product.php es el archivo que me gustaría sobrescribir.

Ahora, ya especifico los productos por página con un filtro en el functions.php de mi tema de la siguiente manera:

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

Y he añadido esta línea en el archivo archive-product.php que he copiado a carpeta de mi tema/woocommerce para sobrescribir el predeterminado:

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

Cuando visito shop_page/?showall=1 el filtro falla al ejecutarse. El filtro en functions.php parece dominar a pesar de tener una prioridad más baja.

1
Comentarios

¿has revisado la documentación de WooCommerce? http://wcdocs.woothemes.com/snippets/change-number-of-products-displayed-per-page/

ronald ronald
26 feb 2013 01:32:27
Todas las respuestas a la pregunta 3
0

Solo agrega esta verificación condicional a tu archivo 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;' ) );
}
26 feb 2013 03:57:41
0

Tarde para la fiesta, pero si no tienes que dar soporte a PHP 5.2, es más seguro y eficiente usar un cierre (closure):

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

(Ver manual de PHP sobre create_function).

3 mar 2016 18:54:52
0

Acabo de leer tu tema,

He creado un plugin para esto que crea un cuadro desplegable para que el visitante seleccione el número de productos que desea ver.

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

Espero que puedas usar esto en tu situación.

8 mar 2014 12:49:39