Woocommerce의 마지막에 품절된 제품 표시
품절된 상품은 카테고리나 페이지 끝에 워드프레스로 표시할 수 있습니까?
따라서 고객은 먼저 사용 가능한 제품을 확인한 후 품절된 제품을 확인합니다.
이는 Viktor & Bogdan의 답변과 동일하지만 추가 클래스 코드는 없습니다.
를 사용합니다.post_clause
필터를 눌러 제품 쿼리를 수정합니다.우리가JOIN
wp_postmeta 테이블을 쿼리에 추가하여orderby _stock_status
기존 쿼리에 대한 절입니다.다른 방법으로는orderby
절도 쿼리에 남습니다.
add_filter('posts_clauses', 'order_by_stock_status');
function order_by_stock_status($posts_clauses) {
global $wpdb;
// only change query on WooCommerce loops
if (is_woocommerce() && (is_shop() || is_product_category() || is_product_tag() || is_product_taxonomy())) {
$posts_clauses['join'] .= " INNER JOIN $wpdb->postmeta istockstatus ON ($wpdb->posts.ID = istockstatus.post_id) ";
$posts_clauses['orderby'] = " istockstatus.meta_value ASC, " . $posts_clauses['orderby'];
$posts_clauses['where'] = " AND istockstatus.meta_key = '_stock_status' AND istockstatus.meta_value <> '' " . $posts_clauses['where'];
}
return $posts_clauses;
}
바꿀 수 있다istockstatus.meta_value ASC
로.istockstatus.meta_value DESC
먼저 품절된 아이템을 원하신다면요.
WP에서 테스트 완료: 4.8, WC 3.0.8
상기의 모든 솔루션을 시험해 보았습니다만, 그것들은 효과가 있었지만, 사이트의 다른 문제(아마도 테마 경합에 의한 문제)가 발생했습니다.다양한 상황/테마에서는 모두 유효하다고 생각합니다.아래 코드가 드디어 나에게 효과가 있었다(출처 언급)
출처 : https://www.businessbloomer.com/woocommerce-show-in-stock-products-first-shop/
/**
* @snippet Sort Products By Stock Status - WooCommerce Shop
* @how-to Get CustomizeWoo.com FREE
* @author Rodolfo Melogli
* @compatible WooCommerce 3.9
* @donate $9 https://businessbloomer.com/bloomer-armada/
*/
add_filter( 'woocommerce_get_catalog_ordering_args', 'bbloomer_first_sort_by_stock_amount', 9999 );
function bbloomer_first_sort_by_stock_amount( $args ) {
$args['orderby'] = 'meta_value';
$args['order'] = 'ASC';
$args['meta_key'] = '_stock_status';
return $args;
}
다음은 제품 재배치를 위한 스니펫입니다(재고 우선)
<?php
/**
* Order product collections by stock status, instock products first.
*/
class iWC_Orderby_Stock_Status
{
public function __construct()
{
// Check if WooCommerce is active
if (in_array('woocommerce/woocommerce.php', apply_filters('active_plugins', get_option('active_plugins')))) {
add_filter('posts_clauses', array($this, 'order_by_stock_status'), 2000);
}
}
public function order_by_stock_status($posts_clauses)
{
global $wpdb;
// only change query on WooCommerce loops
if (is_woocommerce() && (is_shop() || is_product_category() || is_product_tag())) {
$posts_clauses['join'] .= " INNER JOIN $wpdb->postmeta istockstatus ON ($wpdb->posts.ID = istockstatus.post_id) ";
$posts_clauses['orderby'] = " istockstatus.meta_value ASC, " . $posts_clauses['orderby'];
$posts_clauses['where'] = " AND istockstatus.meta_key = '_stock_status' AND istockstatus.meta_value <> '' " . $posts_clauses['where'];
}
return $posts_clauses;
}
}
new iWC_Orderby_Stock_Status;
?>
https://www.snip2code.com/Snippet/114858/WooCommerce-Products-Order-by-Stock-Stat
@syposby answer는 여기서 가장 좋은 대답일 것이다.일부 플러그인과의 호환성에 몇 가지 문제가 있었습니다만, 대부분의 경우 문제없이 동작하는 것 같습니다.
여기서 말하는 것은 몇 가지 주의사항입니다.
- 프로그래밍 방식으로 제품을 만드는 플러그인은 재고 상태 메타 키를 추가하지 못할 수 있습니다. 이 키가 존재하지 않는 경우 이 솔루션은 이러한 키를 결과에서 완전히 제외합니다.
- 또한 재고 상태 값에 따라 알파벳 순으로 주문하기 때문에 이 솔루션이 기존 주문과 충돌할 수 있는 사용 사례도 있습니다.재고현황' 유형이 여러 개 사용되는 경우 이 주문으로 인해 결과에서 인위적으로 그룹화됩니다.
동일한 구현 위에 구축된 이 버전은 원하는 결과를 희생하지 않고 더 넓은 호환성을 제공할 수 있습니다.
/**
* Sorts the Woocommerce Archive product query to push out of stock products to the end
*/
function _nok_order_by_stock_status( $posts_clauses, $query ) {
// only change query on WooCommerce loops
if ( $query->is_main_query() && ( is_product_category() || is_product_tag() || is_product_taxonomy() || is_shop() ) ) {
global $wpdb;
$posts_clauses['join'] .=
" LEFT JOIN (
SELECT post_id, meta_id, meta_value FROM $wpdb->postmeta
WHERE meta_key = '_stock_status' AND meta_value <> ''
) istockstatus ON ($wpdb->posts.ID = istockstatus.post_id) ";
$posts_clauses['orderby'] =
" CASE istockstatus.meta_value WHEN
'outofstock' THEN 1
ELSE 0
END ASC, " . $posts_clauses['orderby'];
}
return $posts_clauses;
}
add_filter( 'posts_clauses', '_nok_order_by_stock_status', 2000, 2 );
WooCommerce에서 인벤토리 관리를 위한 글로벌 구성 옵션에 액세스하고 WordPress 관리자 왼쪽에서 WooCommerce, Settings 순으로 클릭한 다음 Inventory 탭을 클릭합니다.
이 "재고 부족 상태"가 표시됩니다.
재고 부족 여부 - 이 확인란을 사용하여 WooCommerce 카탈로그 내의 재고 항목을 숨길지 여부를 결정할 수 있습니다.
http://www.inmotionhosting.com/support/website/woocommerce/managing-inventory-in-woocommerce
카테고리 끝에 표시하기 위해 pre_get_posts를 사용하여 재고를 기준으로 주문할 수 있지만 다른 정렬이 손실됩니다.
이 코드를 사용해 보세요(함수를 입력).주제 php) : ):
class iWC_Orderby_Stock_Status {
public function __construct() {
if (in_array('woocommerce/woocommerce.php', apply_filters('active_plugins', get_option('active_plugins')))) {
add_filter('posts_clauses', array($this, 'order_by_stock_status'), 2000);
}
}
public function order_by_stock_status($posts_clauses) {
global $wpdb;
if (is_woocommerce() && (is_shop() || is_product_category() || is_product_tag())) {
$posts_clauses['join'] .= " INNER JOIN $wpdb->postmeta istockstatus ON ($wpdb->posts.ID = istockstatus.post_id) ";
$posts_clauses['orderby'] = " istockstatus.meta_value ASC, " . $posts_clauses['orderby'];
$posts_clauses['where'] = " AND istockstatus.meta_key = '_stock_status' AND istockstatus.meta_value <> '' " . $posts_clauses['where'];
}
return $posts_clauses;
}
}
new iWC_Orderby_Stock_Status;
여기서 찍었어요.
최신 버전의 WooCommerce에 대해서는, 다음의 회답을 참조해 주세요.https://stackoverflow.com/a/44597448/3925099
이것이 최선의 해결책입니다.
add_action( 'pre_get_posts', function ( $q ) {
if ( !is_admin() // Target only front end
&& $q->is_main_query() // Only target the main query
&& $q->is_post_type_archive() // Change to suite your needs
) {
$q->set( 'meta_key', '_stock_status' );
$q->set( 'orderby', 'meta_value' );
$q->set( 'order', 'ASC' );
}
}, PHP_INT_MAX );
이 코드를 사용할 수 있습니다.
add_action( 'pre_get_posts', function( $query ) {
if ( $query->is_main_query() && is_woocommerce() && ( is_shop() || is_product_category() || is_product_tag() ) ) {
if( $query->get( 'orderby' ) == 'menu_order title' ) { // only change default sorting
$query->set( 'orderby', 'meta_value' );
$query->set( 'order', 'ASC' );
$query->set( 'meta_key', '_stock_status' );
}
}
});
위의 답변 중 하나를 편집했습니다.
/**
* @snippet Order product collections by stock status, instock products first.
* @author Rkoms
*/
class iWC_Orderby_Stock_Status {
public function __construct() {
if (in_array('woocommerce/woocommerce.php', apply_filters('active_plugins', get_option('active_plugins')))) {
add_filter('posts_clauses', array($this, 'order_by_stock_status'), 2000, 2);
}
}
public function order_by_stock_status($posts_clauses, $query) {
global $wpdb;
if ( $query->is_main_query() && is_woocommerce() && (is_shop() || is_product_category() || is_product_tag())) {
$posts_clauses['join'] .= " INNER JOIN $wpdb->postmeta istockstatus ON ($wpdb->posts.ID = istockstatus.post_id) ";
$posts_clauses['orderby'] = " istockstatus.meta_value ASC, " . $posts_clauses['orderby'];
$posts_clauses['where'] = " AND istockstatus.meta_key = '_stock_status' AND istockstatus.meta_value <> '' " . $posts_clauses['where'];
}
return $posts_clauses;
}
}
new iWC_Orderby_Stock_Status;
대체의 심플한 솔루션으로서, 제품 리스트가 플렉스 박스내에 있는 경우는, 다음의 룰로 CSS에서도 실행할 수 있습니다.
ul.products li.product.outofstock {order:1}
언급URL : https://stackoverflow.com/questions/25113581/show-out-of-stock-products-at-the-end-in-woocommerce
'programing' 카테고리의 다른 글
스프링 부트의 OffsetDateTime에 대한 Jackson 날짜 형식 (0) | 2023.03.23 |
---|---|
$.syslog( { async : false } ) 요청이 아직 비동기적으로 실행되고 있습니까? (0) | 2023.03.23 |
create-react-app index.js 파일을 테스트합니다. (0) | 2023.03.23 |
wp_insert_post를 사용하여 워드프레스로 POST permalink/slug을 설정하는 방법 (0) | 2023.03.23 |
JSON에서 base64 인코딩된 데이터 직렬화 (0) | 2023.03.23 |