web-dev-qa-db-ja.com

ショップページに特定のカテゴリの商品を表示する

私は多くの人がこの質問をしたことを知っていますが、私はそれをする適切な方法を見つけませんでした。ショップページのクエリの実行前に簡単なmeta_query(product_cat)を追加する方法。

たぶんフィルターを使って?

よろしく、

エイドリアン

5
aguidis

ショップページは、実際には「商品」タイプの投稿のアーカイブページです。そのテンプレートはwoocommerce/archive-product.phpにあります。

ループの前にクエリを前処理するには pre_get_posts アクション、商品アーカイブページにいることを認識するには conditional_tags 、商品カテゴリをフィルタリングするには taxonomy query を使用する必要があります。分類法「product_cat」に属します。

たとえば、次のもの(テーマのfunctions.phpまたはプラグインに配置されている)は、商品カテゴリ 'type-1'の商品のみを表示します。

 add_action('pre_get_posts','shop_filter_cat');

 function shop_filter_cat($query) {
    if (!is_admin() && is_post_type_archive( 'product' ) && $query->is_main_query()) {
       $query->set('tax_query', array(
                    array ('taxonomy' => 'product_cat',
                                       'field' => 'slug',
                                        'terms' => 'type-1'
                                 )
                     )
       );   
    }
 }

'operator' => NOT INを使用してカテゴリを除外することもでき、 'terms'は商品カテゴリのスラッグの配列にすることができます。

クエリのカスタマイズの概要は http://www.billerickson.net/customize-the-wordpress-query/ です。

14
adelval

これは私のために働いた:

[product_category category="YOUR CATEGORY" per_page="8" columns="3" orderby="date" order="desc"]
2
Chris

あなたのショップページに特定のカテゴリーの商品を表示したい場合は、テーマのfunction.phpファイルに以下のコードを挿入してください。

// Execute before the loop starte
add_action( 'woocommerce_before_shop_loop', 'techlyse_before_action', 15 );
function techlyse_before_action() {
    //To ensure Shop Page
    if ( is_shop() ) {
        $query_args['tax_query'] =  array(
            array( 
                'taxonomy' => 'product_cat',   
                'field' => 'id',  //If you want the category slug you pass slug instead of id and 1330 instead of category slug. 
                'terms' => 1330 
            )
        );  
        //print_r($query_args);
        query_posts( $query_args );
    }
} 

// Execute after the loop ends
add_action( 'woocommerce_after_shop_loop', 'techlyse_after_action', 15 );
function techlyse_after_action() {
    //To ensure Shop Page
    if ( is_shop() ) {
        //Reset the Query after Loop
        wp_reset_query();
    }
}
0