2017-08-30 20 views
3

私は除外する必要があります在庫切れ私のフロントページでは、Woocommerceの「在庫あり」商品のみを表示しています最近の商品shortcode

[recent_products] 

それは在庫品の上映のうち停止するhide_outofstock="true"またはそれらの線に沿って何かのようなルールを作成することは可能ですか?

私はこの問題に近づく方法に関するアイデアを探していますが、私は全くコーダーではありませんが、通常、このような問題を回避するために何かをフランケンシュタインできます。しかし、今、私は困惑しています。すべての助けが大いに感謝されます。

  • 私は、サイトの他の領域に表示される必要があるので、WooCommerceの設定ページからすべての在庫切れ製品を隠すことはできません。

  • 在庫切れではなく「隠す」コードを使用すると、製品が表示されるはずの空白が表示されます。

  • 在庫レベルが動的に変化する必要が頻繁に変わります。手動で製品IDを制限するには時間がかかりすぎます。

答えて

0

WC_Shortcodesクラスのソースコードに少し検索した後、ここでそれを行うための適切な方法は次のとおりです。

add_filter('woocommerce_shortcode_products_query', function($query_args, $atts, $loop_name){ 
    if($loop_name == 'recent_products'){ 
     $query_args['meta_query'] = array(array(
      'key'  => '_stock_status', 
      'value' => 'instock', 
      'compare' => 'LIKE', 
     )); 
    } 
    return $query_args; 
}, 10, 3); 

コードは、あなたのアクティブな子テーマ(またはテーマのfunction.phpファイルに行きます)または任意のプラグインファイルでも使用できます。

WooCommerce 3+でテストされ、動作します。

+0

を次のコードを追加します!あまりにもあなたの助けをありがとう:) –

1

ほんの少しの更新です。上記のコードはシンプルな製品ではうまくいきましたが、[recent_products]ショートコードを使用すると、1つのバリエーションのバリエーションと1つのバリエーションのバリエーションは表示されませんでした。私は値をoutofstockに変更し、NOT LIKEと比較することでこれを修正したと思います。

add_filter('woocommerce_shortcode_products_query', function($query_args, $atts, $loop_name){ 
 
    if($loop_name == 'recent_products'){ 
 
     $query_args['meta_query'] = array(array(
 
      'key'  => '_stock_status', 
 
      'value' => 'outofstock', 
 
      'compare' => 'NOT LIKE', 
 
     )); 
 
    } 
 
    return $query_args; 
 
}, 10, 3);

0

、あなたのテーマのfunctions.phpファイルに見事に勤務

function custom_woocommerce_shortcode_products_query($args) { 
    if ('yes' == get_option('woocommerce_hide_out_of_stock_items')) { 
    $args['meta_query'][] = array(
     'key' => '_stock_status', 
     'value' => 'instock', 
     'compare' => 'IN' 
    ); 
    } 
    return $args; 
} 

add_filter('woocommerce_shortcode_products_query', 'custom_woocommerce_shortcode_products_query'); 
関連する問題