Mostra tutti i prodotti in una pagina con WooCommerce
Ho WooCommerce in esecuzione su questo negozio.
Sebbene l'impostazione predefinita sia mostrare 12 prodotti per pagina, il cliente ha richiesto un pulsante "mostra tutto" che eviti all'utente di dover utilizzare la paginazione per vedere gli altri prodotti.
Esiste una funzione che posso eseguire sulla pagina corrente che riesegua il loop ma modifichi la query per mostrare più 'post per pagina'? Ho esaminato i file template di WooCommerce ma non è ovvio come questo venga fatto.
Stavo pensando di passare una variabile GET
PHP alla pagina corrente e di testarla per determinare se eseguire la query modificata, così (fuori dal loop):
<a href="<?php
echo get_permalink( $post->ID ) . "?showall=1";
?>">Mostra tutto</a>
E poi avere qualcosa del genere prima del loop dei file template
<?php if($_GET['showall'] = 1){ //qualcosa qui per modificare la query (wp_query forse?? o un filtro woocommerce) } ?>
//il loop come normale
Sono sulla strada giusta? È qualcosa di facile da realizzare in questo modo. Qualsiasi guida su come implementarlo sarebbe apprezzata.
Modifica:
OK ho fatto un po' più di ricerche nei template di WooCommerce. Sembra che archive-product.php
sia il file che vorrei sovrascrivere.
Ora, specifico già i prodotti per pagina con un filtro nel functions.php del mio tema come segue:
add_filter( 'loop_shop_per_page', create_function( '$cols', 'return 12;' ), 20 );
E ho aggiunto questa riga nel file archive-product.php
che ho copiato in cartella del mio tema/woocommerce
per sovrascrivere quello predefinito:
<?php if($_GET['showall']==1){
add_filter( 'loop_shop_per_page', create_function( '$cols', 'return 8;' ), 30 );
} ?>
Quando visito shop_page/?showall=1
il filtro non viene eseguito. Il filtro in functions.php sembra dominare nonostante abbia una priorità inferiore.
Aggiungi semplicemente il controllo condizionale al tuo file 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;' ) );
}

Arrivato in ritardo alla festa, ma se non devi preoccuparti di PHP 5.2 è più sicuro ed efficiente usare una chiusura:
add_filter( 'loop_shop_per_page', function ( $cols ) {
return - 1;
} );
(Vedi il manuale PHP su create_function
.)

Ho appena letto il tuo argomento,
Ho creato un plugin apposito per creare un menu a discesa che permette ai visitatori di selezionare il numero di prodotti che desiderano visualizzare.
http://wordpress.org/plugins/woocommerce-products-per-page/
Spero che possa esserti utile nella tua situazione.
