programing

In Woocommerce에서 모든 변형의 총 재고를 가져옵니다.

goodsources 2023. 9. 13. 22:33
반응형

In Woocommerce에서 모든 변형의 총 재고를 가져옵니다.

저는 우커머스에서 가변 제품의 모든 변형의 총 재고를 보여주고 싶습니다.각 제품 변동의 재고는 제품 변동 수준에서 관리됩니다.

가변 제품에 사용할 경우:

global $product;

echo $product->get_stock_quantity();

저는 이 제품의 모든 변형의 총 재고를 파악하지 못합니다.

In Woocommerce에서 모든 변형의 총 재고를 구할 수 있나요?

다음 사용자 정의 기능은 변동 상품(전용)에 대한 모든 상품 변동 재고 수량의 합을 표시합니다.

가변 제품의 모든 하위 변형의 합을 만드는 매우 가벼운 SQL 쿼리를 사용합니다.

참고: 재고는 제품 변동 수준에서 관리해야 합니다.

function wc_get_variable_product_stock_quantity( $output = 'raw', $product_id = 0 ){
    global $wpdb, $product;

    // Get the product ID (can be defined)
    $product_id = $product_id > 0 ? $product_id : get_the_id();

    // Check and get the instance of the WC_Product Object
    $product = is_a( $product, 'WC_Product' ) ? $product : wc_get_product($product_id);

    // Only for variable product type
    if( $product->is_type('variable') ){

        // Get the stock quantity sum of all product variations (children)
        $stock_quantity = $wpdb->get_var("
            SELECT SUM(pm.meta_value)
            FROM {$wpdb->prefix}posts as p
            JOIN {$wpdb->prefix}postmeta as pm ON p.ID = pm.post_id
            WHERE p.post_type = 'product_variation'
            AND p.post_status = 'publish'
            AND p.post_parent = '$product_id'
            AND pm.meta_key = '_stock'
            AND pm.meta_value IS NOT NULL
        ");

        // Preparing formatted output
        if ( $stock_quantity > 0 ) {
            $html = '<p class="stock in-stock">'. sprintf( __("%s in stock", "woocommerce"), $stock_quantity ).'</p>';
        } else {
            if ( is_numeric($stock_quantity) )
                $html = '<p class="stock out-of-stock">' . __("Out of stock", "woocommerce") . '</p>';
            else
                $html = '';
        }

        // Different output options
        if( $output == 'echo_html' )
            echo $html;
        elseif( $output == 'return_html' )
            return $html;
        else
            return $stock_quantity;
    }
}

코드가 작동합니다.활성 하위 테마(또는 활성 테마)의 php 파일입니다.테스트를 거쳐 작동합니다.


사용법(3건):

1) php 코드 어디에서나 재고 수량을 확보할 수 있습니다 (다이나믹에서 $product_id):

$stock_quantity = wc_get_variable_product_stock_quantity( 'raw', $product_id );

2) 상점 및 보관 페이지에 표시(가격 범위 예제에서):

add_action( 'woocommerce_after_shop_loop_item_title', 'display_variable_product_stock_quantity', 20 );
function display_variable_product_stock_quantity(){
    wc_get_variable_product_stock_quantity( 'echo_html' );
}

코드가 작동합니다.활성 하위 테마(또는 활성 테마)의 php 파일입니다.

enter image description here


3) 단일 제품 페이지로 표시(가격 범위 예하에서):

add_action( 'woocommerce_single_product_summary', 'display_variable_product_stock_quantity', 15 );
function display_variable_product_stock_quantity(){
    wc_get_variable_product_stock_quantity( 'echo_html' );
}

코드가 작동합니다.활성 하위 테마(또는 활성 테마)의 php 파일입니다.

enter image description here

상품이 변동상품이 아니거나 상품수준에서 재고관리가 가능한 경우 총 재고수량을 반환하는 기능입니다.

그렇지 않으면 각 변동에 대한 총 재고량을 계산합니다.

예를 들어 functions.php에 이 함수를 넣을 수 있습니다.이렇게 부르죠.

<?php

global $product;
$stockQuantity = get_total_combined_stock_quantity($product);

?>
function get_total_combined_stock_quantity($product)
{
    if (!$product->is_type('variable')) {
        return $product->get_stock_quantity();
    }

    //Stock management is enabled at product level
    if ($product->managing_stock()) {
        return $product->get_stock_quantity();
    }

    $total = 0;

    if ($product->is_type('variable')) {
        foreach ($product->get_visible_children() as $variationId) {
            $variation = wc_get_product($variationId);
            $total += $variation->get_stock_quantity();
        }
    }

    return $total;
}
add_action ( 'woocommerce_before_add_to_cart_button', 'get_selected_stock' );함수 get_selected_stock {글로벌 $ 제품
if ($product->is_type( 'variable' )){$208_vari = $product->get_available_variations();각 항목에 대해 $($key_vari as $key => $value){$vari_id = $value['vari_id'];$vari_colr = $value['properties'][a]tribute_pa_pa'];$vari_obj = 새로운 WC_Product_variation($vari_id);$vari_stock = $vari_obj->get_stock_get;
echo $vari_colr. ": " . $vari_stock. ";
}}

이 코드를 기능에 붙여 넣습니다.당신의 테마의 php와 당신의 작업이 끝날 것입니다.

언급URL : https://stackoverflow.com/questions/52857156/get-the-total-stock-of-all-variations-from-a-variable-product-in-woocommerce

반응형