[英]Hide 'out of stock' products in Woocommerce
在“產品”和“庫存”下,我檢查了以下設置:“隱藏目錄中的缺貨商品”
現在所有售罄的產品都隱藏在存檔/類別視圖中。 到現在為止還挺好。
問題是隱藏的(缺貨)產品是按頁面計算的。 因此,如果第一頁上有 3 種產品售罄,則僅顯示有庫存的產品 (6)。
這些“隱藏”的產品似乎也仍然可以搜索,並且可以通過不同的小部件看到。
任何想法如何解決這一問題? 我的意思是真正隱藏缺貨的產品。 還是我需要手動刪除它們?
您可以嘗試將其添加到主題的 functions.php 文件中:
add_action( 'pre_get_posts', 'custom_pre_get_posts_query' );
function custom_pre_get_posts_query( $q ) {
if ( ! $q->is_main_query() ) return;
if ( ! $q->is_post_type_archive() ) return;
if ( ! is_admin() ) {
$q->set( 'meta_query', array(array(
'key' => '_stock_status',
'value' => 'outofstock',
'compare' => 'NOT IN'
)));
}
remove_action( 'pre_get_posts', 'custom_pre_get_posts_query' );
}
我從這個 URL 修改了代碼: http : //www.wptaskforce.com/how-to-exclude-one-or-more-category-in-woocommerce-shop-page/
再次保存在這里以防網站離線:(此代碼不包括某些產品類別)
add_action( 'pre_get_posts', 'custom_pre_get_posts_query' );
function custom_pre_get_posts_query( $q ) {
if ( ! $q->is_main_query() ) return;
if ( ! $q->is_post_type_archive() ) return;
if ( ! is_admin() ) {
$q->set( 'tax_query', array(array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => array( 'PUT YOUR CATEGORY HERE' ), // Don't display products in the membership category on the shop page . For multiple category , separate it with comma.
'operator' => 'NOT IN'
)));
}
remove_action( 'pre_get_posts', 'custom_pre_get_posts_query' );
}
自我注意:始終閱讀開發人員的更改日志。
在這里找到答案: http : //develop.woothemes.com/woocommerce/2014/02/solving-common-issues-after-updating-to-woocommerce-2-1/#category-counts-incorrect
如果類別的產品計數顯示過高或過低的數字,更新到 WooCommerce 2.1 后,有一個簡單的解決方法。
轉到 WooCommerce > WordPress 管理面板的系統狀態中的“工具”選項卡。 在這里,您首先使用“重新計算術語”按鈕,然后使用“清除瞬變”按鈕。 這將強制系統在下次加載類別時重新計算所有產品。
更新:還要記住,將庫存數量更改為 0 是不夠的。您還必須將“庫存狀態”設置為“缺貨”。 如果沒有,即使沒有庫存產品,該產品也將被計算在商店中。
我找到了更簡單的方法,如果有人仍在尋找在 woocommerce 中隱藏缺貨的產品,請按照這些簡單的步驟操作,而無需編輯 html!
這僅在您使用官方 woocommerce 簡碼時才有效,但如果您使用可視化作曲家並使用自定義插件或第 3 方插件或簡碼創建頁面,則第一步是針對從循環運行的查詢,然后對其進行修改像這樣的事情
$params = array(
'posts_per_page' => 5,
'post_type' => array('product', 'product_variation'),
'meta_query' => array(
array(
'key' => '_stock_status',
'value' => 'instock'
)
)
);
你必須確定的最重要的部分是
'meta_query' => array(
array(
'key' => '_stock_status',
'value' => 'instock'
)
)
您可以將 PHP 代碼段放在子主題 functions.php 文件的底部。
add_action('woocommerce_product_query', 'custom_woocommerce_product_query');
function custom_woocommerce_product_query($q)
{
if (!is_admin())
{
$oos_query = new WP_Query(['meta_query' => [['key' => '_stock_status', 'value' => 'outofstock', 'compare' => '=', ], ], 'post_type' => 'product', 'posts_per_page' => - 1, 'fields' => 'ids', ]);
$exclude_ids = $oos_query->posts;
$q->set('post__not_in', $exclude_ids);
}
}
我知道這個問題很久以前就有人問過了,但現在問題的解決方案不同了,所以我把這個問題貼給和我有同樣問題的人。 在 WooCommerce 5.3.0 上測試
解決方案:首先確保取消選中Woocomerce > 設置中的“隱藏缺貨產品”復選框,然后將此 PHP 代碼添加到您的子主題 functions.php 文件中:
add_action('woocommerce_product_query', 'show_only_instock_products');
function show_only_instock_products($query) {
$meta_query = $query->get( 'meta_query' );
$meta_query[] = array(
'key' => '_stock_status',
'compare' => '=',
'value' => 'instock'
);
$query->set( 'meta_query', $meta_query );
}
它在我的商店中運行良好,該商店與批發商集成在一起,每小時更新一次庫存水平,並且有數千種產品。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.