>백엔드 개발 >PHP 튜토리얼 >WooCommerce 4에서 사용자 정의 재고 상태를 생성하고 사용하는 방법은 무엇입니까?

WooCommerce 4에서 사용자 정의 재고 상태를 생성하고 사용하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-03 02:53:29227검색

How to Create and Use Custom Stock Statuses in WooCommerce 4 ?

WooCommerce 4에서 제품에 사용자 정의 재고 상태를 추가하는 방법

배경

WooCommerce by 기본값은 재고 있음, 재고 없음, 이월 주문 등을 포함한 여러 재고 상태를 제공합니다. 그러나 특정 재고 관리 요구 사항을 수용하기 위해 사용자 정의 재고 상태를 생성해야 할 수도 있습니다.

사용자 정의 재고 상태 생성

사용자 정의 재고 상태를 생성하려면 다음 코드를 사용하세요. 테마의 function.php 파일 또는 사용자 정의 플러그인의 스니펫:

<code class="php">use WooCommerce\Admin\HTML;
use WooCommerce\Utilities\Product;</code>
<code class="php">/**
 * Add custom stock status options.
 *
 * @param array $status Existing stock status options.
 * @return array Updated stock status options.
 */
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 );

/**
 * Modify availability text based on stock status.
 *
 * @param string $availability Availability text.
 * @param WC_Product $product Product object.
 * @return string Modified availability text.
 */
function filter_woocommerce_get_availability_text( $availability, $product ) {
    // Get stock status
    $product_stock_status = $product->get_stock_status();

    // Modify availability text
    switch ( $product_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 );

/**
 * Modify availability CSS class based on stock status.
 *
 * @param string $class CSS class.
 * @param WC_Product $product Product object.
 * @return string Modified CSS class.
 */
function filter_woocommerce_get_availability_class( $class, $product ) {
    // Get stock status
    $product_stock_status = $product->get_stock_status();

    // Modify CSS class
    switch ( $product_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 side
/**
 * Modify stock HTML on admin products list table.
 *
 * @param string  $stock_html Stock HTML.
 * @param WC_Product $product Product object.
 * @return string Modified 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();
             /*
                Currently the status of the last variant in the loop will be displayed.

                So from here you need to add your own logic, depending on what you expect from your custom stock status.

                By default, for the existing statuses. The status displayed on the admin products list table for variable products is determined as:

                - Product should be in stock if a child is in stock.
                - Product should be out of stock if all children are out of stock.
                - Product should be on backorder if all children are on backorder.
                - Product should be on backorder if at least one child is on backorder and the rest are out of stock.
            */
        }
    }

    // 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 );</code>

단일 제품에 추가

사용자 정의 상태를 생성한 후에는 개별 제품에 추가해야 합니다.

  1. WordPress 관리자에서 수정하려는 제품으로 이동합니다.
  2. '제품 데이터' 섹션까지 아래로 스크롤합니다.
  3. '재고' 탭을 클릭하세요.
  4. '재고 상태'에서 귀하가 생성한 맞춤 상태를 선택하세요.

프런트엔드 디스플레이

이제 사용자 정의 재고 상태가 사이트의 단일 제품 페이지와 제품 아카이브 모두에 ​​표시됩니다.

문제 해결

사용자 정의 상태가 프런트엔드나 관리자에 표시되지 않는 경우, 코드 조각이 테마나 플러그인에 올바르게 추가되었는지, 필터 이름이 올바르게 지정되고 연결되었는지 확인하세요.

위 내용은 WooCommerce 4에서 사용자 정의 재고 상태를 생성하고 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.