WooCommerce:샵에 판매 중인 제품만 표시
제품 아카이브 페이지(일반적으로 WooCommerce의 Shop 페이지)를 만들어야 하는데, On Sale 제품만 표시됩니다.기본적으로는 이 템플릿 레이아웃은 다음 템플릿 레이아웃과 같아야 합니다.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
페이지 템플릿으로 작성되었습니다.
단, 이것은 Simple 제품 타입에서만 동작하며 Simple 제품과 Variable 제품 타입 모두에서 동작해야 합니다.
@mirus의 쇼트코드에 대한 답변은 WooCommerce가 어떻게 판매 중인 아이템만을 조회하고 있는지 확인할 수 있는 아이디어를 주었습니다.WooCommerce에는wc_get_product_ids_on_sale()
판매 품목의 ID를 반환하는 함수입니다.그런 다음 다음 다음 명령을 사용하여 쿼리를 쉽게 조정할 수 있습니다.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
페이지 템플릿으로 작성되었습니다.
query_param()을 사용하는 @gmaggio는 사이트를 파괴합니다.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);
}
if(isset($_GET['bestsellers'])) {
$meta_query = array(
array(
'key' => 'total_sales',
'value' => 0,
'compare' => '>',
'type' => 'numeric'
)
);
}
}
return $query;
}
쇼트 코드를 사용하여 새 페이지 만들기[sale_products per_page="12"]
사용 가능한 쇼트 코드와 그 파라미터의 일람은, http://docs.woothemes.com/document/woocommerce-shortcodes/ 를 참조해 주세요.
다양하고 심플한 제품을 위한 솔루션:
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;
}
언급URL : https://stackoverflow.com/questions/20990199/woocommerce-display-only-on-sale-products-in-shop
'programing' 카테고리의 다른 글
스프링 보안 필터 체인의 구조 (0) | 2023.03.16 |
---|---|
테이블의 행을 angularjs로 정렬 또는 재배치(드래그 앤 드롭) (0) | 2023.03.16 |
각도 JS $watch vs $on (0) | 2023.03.16 |
.webp 파일에 대한 액세스를 차단하는 IIS 서버 (0) | 2023.03.16 |
대응: 상위 컴포넌트의 하위 매핑 (0) | 2023.03.14 |