「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > WooCommerce 4+ で WooCommerce 製品にカスタム在庫ステータスを追加するにはどうすればよいですか?

WooCommerce 4+ で WooCommerce 製品にカスタム在庫ステータスを追加するにはどうすればよいですか?

2024 年 11 月 18 日に公開
ブラウズ:646

How to Add Custom Stock Statuses to WooCommerce Products in WooCommerce 4 ?

WooCommerce 4 の WooCommerce 製品のカスタム在庫ステータス

WooCommerce 4 の製品にカスタム在庫ステータスを追加するプロセスは比較的簡単です。ただし、ステータスがフロントエンドとバックエンドで正しく表示されるようにするには、特定の関数を変更する必要があります。

カスタム在庫ステータスの追加

カスタム在庫ステータスを追加するには、次のコードを function.php ファイルに追加します:

function filter_woocommerce_product_stock_status_options( $status ) {
    // Add new statuses
    $status['pre_order'] = __('Pre Order', 'woocommerce');
    $status['contact_us'] = __('Contact us', 'woocommerce');

    return $status;
}
add_filter( 'woocommerce_product_stock_status_options', 'filter_woocommerce_product_stock_status_options', 10, 1 );

このコードは、「予約注文」と「お問い合わせ」という 2 つの新しいステータスを追加します。

カスタム在庫の表示可用性

フロントエンドでカスタム ステータスが正しく表示されるようにするには、次の変更を適用します:

// Availability text
function filter_woocommerce_get_availability_text( $availability, $product ) {
    // Get stock status
    switch( $product->get_stock_status() ) {
        case 'pre_order':
            $availability = __( 'Pre Order', 'woocommerce' );
            break;
        case 'contact_us':
            $availability = __( 'Contact us', 'woocommerce' );
            break;
    }

    return $availability;
}
add_filter( 'woocommerce_get_availability_text', 'filter_woocommerce_get_availability_text', 10, 2 );

// Availability CSS class
function filter_woocommerce_get_availability_class( $class, $product ) {
    // Get stock status
    switch( $product->get_stock_status() ) {
        case 'pre_order':
            $class = 'pre-order';
            break;
        case 'contact_us':
            $class = 'contact-us';
            break;
    }

    return $class;
}
add_filter( 'woocommerce_get_availability_class', 'filter_woocommerce_get_availability_class', 10, 2 );

管理製品リストに在庫ステータスを表示する

管理製品リストにカスタム在庫ステータスを表示するにはテーブルで、次の関数を変更します:

// Admin stock html
function filter_woocommerce_admin_stock_html( $stock_html, $product ) {
    // Simple
    if ( $product->is_type( 'simple' ) ) {
        // Get stock status
        $product_stock_status = $product->get_stock_status();
    // Variable
    } elseif ( $product->is_type( 'variable' ) ) {
        foreach( $product->get_visible_children() as $variation_id ) {
            // Get product
            $variation = wc_get_product( $variation_id );

            // Get stock status
            $product_stock_status = $variation->get_stock_status();
        }
    }

    // Stock status
    switch( $product_stock_status ) {
        case 'pre_order':
            $stock_html = '<mark class="pre-order" style="background:transparent none;color:#33ccff;font-weight:700;line-height:1;">' . __( 'Pre order', 'woocommerce' ) . '</mark>';
            break;
        case 'contact_us':
            $stock_html = '<mark class="contact-us" style="background:transparent none;color:#cc33ff;font-weight:700;line-height:1;">' . __( 'Contact us', 'woocommerce' ) . '</mark>';
            break;
    }

    return $stock_html;
}
add_filter( 'woocommerce_admin_stock_html', 'filter_woocommerce_admin_stock_html', 10, 2 );

オプション: フックでのカスタム在庫ステータスの使用

次の場合にフックでカスタム在庫ステータスを使用できます。 $product オブジェクトにアクセスできるか、グローバル $product を使用できます。

注:

  • アクセス権がない場合は、グローバル $product を使用してください。 $product オブジェクト (woocommerce_shop_loop_item_title フックや woocommerce_single_product_summary フックなど)。
  • woocommerce_get_price_html フックのように、デフォルトでコールバック関数に渡された場合、$product オブジェクトにアクセスします。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3