web-dev-qa-db-ja.com

WooCommerceで1ページにすべての商品を表示する

このストア でWooCommerceを実行しています。

デフォルトでは1ページに12の商品を表示するように設定されていますが、クライアントは他の商品に移動するためにページ付けを使用しなくても済むように「すべて表示」ボタンを要求しました。

現在のページで実行してループを再実行しながらクエリを変更して「1ページあたりの投稿数」を増やすことができる機能はありますか。私はWooCommerceテンプレートファイルについて突っ込んだことがありますが、これがどのように行われるかは明らかではありません。

私は、現在のページにphp GET変数を渡し、変更されたクエリを実行するかどうかを判断するためにそれをテストすることを考えていました。

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

そして、テンプレートファイルがループする前に、このようなものがあります

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

私は正しい軌道に乗っていますか?これは、このようにして達成するのが簡単なことです。実装方法に関するガイダンスがあれば幸いです。

編集: OK WooCommerceのテンプレートについてもう少し掘り下げました。 archive-product.phpが上書きしたいファイルのようです。

今、私はすでに以下のように私のテーマのfunctions.phpでフィルタでページごとの商品を指定します:

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

そして、この行をarchive-product.phpにコピーしたmy theme folder/woocommerceファイルに追加して、デフォルトをオーバーライドしました。

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

それから私がshop_page/?showall=1にアクセスすると、フィルタは実行に失敗します。 functions.phpのフィルタは優先度が低いにもかかわらず支配的に見えるようです。

4
harryg

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

パーティーに遅刻しますが、あなたがphp 5.2を説明する必要がないなら、クロージャーを使うことはより安全でより効率的です:

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

create_functionphp manual を参照してください。)

2
Caspar

トピックを読んでください。

訪問者が見たい製品の数を選択するためのドロップダウンボックスを作成するために、この周りにプラグインを作成しました。

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

あなたがあなたの状況でこれを使用できることを願っています。

1
Sormano