製品アーカイブページ(通常ショップWooCommerceのページ)を作成する必要がありますが、セール製品。基本的には、_archive-product.php
_と同じテンプレートレイアウトを使用する必要があります。このページへのリンクがメインメニューに表示されます。これについてどうすればよいですか?
私はなんとかON SALE製品を除外し、以下のコードをif ( have_posts() ) :
行のすぐ上に配置しました...
_$args = array(
'post_type' => 'product',
'order' => 'ASC',
'paged' => $paged,
'meta_query' => array(
array(
'key' => '_sale_price',
'value' => 0,
'compare' => '>',
'type' => 'numeric'
)
)
);
query_posts( $args );
_
コードは、私が_archive-product.php
_と名付けてページテンプレートとして作成した_archive-product_sale.php
_のcopyに配置されています。
ただし、これはSimple productsタイプでのみ機能し、Simple製品とVariable製品タイプの両方で機能する必要があります。
ショートコードに関する@mirusの回答から、WooCommerceが販売中のアイテムのみをクエリしている方法を確認することができました。どうやらWooCommerceには、販売中のアイテムのIDを返すwc_get_product_ids_on_sale()
関数があります。次に、post__in
パラメータを使用してクエリを簡単に調整し、特定のアイテムのみを返すことができます。
WooCommerceはwoocommerce_product_query
クラスにclass-wc-query.php
フックがあり、実行前にクエリを変更できます。..を変更する通常の場所であるpre_get_posts
で実行されます。クエリ。 Wooのフックを使用するということは、このクエリの変更をいつ適用するかについての条件付きロジックの大部分を処理させることを意味します。
add_action( 'woocommerce_product_query', 'so_20990199_product_query' );
function so_20990199_product_query( $q ){
$product_ids_on_sale = wc_get_product_ids_on_sale();
$q->set( 'post__in', $product_ids_on_sale );
}
私はなんとかON SALE以下のコードで製品を除外しましたすぐ上に配置if ( have_posts() ) :
行...
$args = array(
'post_type' => 'product',
'meta_query' => array(
'relation' => 'OR',
array( // Simple products type
'key' => '_sale_price',
'value' => 0,
'compare' => '>',
'type' => 'numeric'
),
array( // Variable products type
'key' => '_min_variation_sale_price',
'value' => 0,
'compare' => '>',
'type' => 'numeric'
)
)
);
query_posts( $args );
コードはarchive-product.php
のコピーに配置され、archive-product_sale.php
に名前を変更してページテンプレートとして作成しました。
@ gmaggio query_posts()を使用 サイトが壊れます 。 pre_get_posts を使用します
add_filter( 'pre_get_posts', 'catalog_filters' );
function catalog_filters( $query ) {
if ( $query->is_main_query() && $query->post_type = 'product' ) {
if(isset($_GET['onsale'])) {
$meta_query = array(
'relation' => 'OR',
array( // Simple products type
'key' => '_sale_price',
'value' => 0,
'compare' => '>',
'type' => 'numeric'
),
array( // Variable products type
'key' => '_min_variation_sale_price',
'value' => 0,
'compare' => '>',
'type' => 'numeric'
)
); $query->set('meta_query', $meta_query); d($query);
}
if(isset($_GET['bestsellers'])) {
$meta_query = array(
array(
'key' => 'total_sales',
'value' => 0,
'compare' => '>',
'type' => 'numeric'
)
);
}
}
return $query;
}
可変でシンプルな製品のソリューション:
add_action( 'save_post_product', 'update_product_set_sale_cat_var' );
function update_product_set_sale_cat_var( $post_id ) {
$sales_ids = wc_get_product_ids_on_sale();
foreach ( $sales_ids as $sale_id ) :
if ($sale_id == $post_id) :
wp_set_object_terms($post_id, 'sale', 'product_cat', true );
else :
if ( has_term( 'sale', 'product_cat', $post_id ) ) {
wp_remove_object_terms( $post_id, 'sale', 'product_cat' );
}
endif;
endforeach;
}
ショートコード[sale_products per_page="12"]
を使用して新しいページを作成します
利用可能なショートコードとそのパラメータのリストはこちらです http://docs.woothemes.com/document/woocommerce-shortcodes/