Получите общий запас всех вариантов из переменного продукта в Woocommerce - PullRequest
0 голосов
/ 17 октября 2018

IN woocommerce Я хотел бы отобразить общий запас всех вариантов в переменном продукте.Запас каждого варианта продукта управляется на уровне варианта продукта.

Если я использую для переменного продукта:

global $product;

echo $product->get_stock_quantity();

, я не получаю общий запас всех вариантов этогоproduct.

Можно ли получить общий запас всех вариантов из переменного продукта в Woocommerce?

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 17 октября 2018

Следующая пользовательская функция будет отображать сумму количества запасов всех вариантов продукта для переменного продукта (только).

Он использует очень легкий 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;
    }
}

Код помещается в файл function.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' );
}

Код помещается в файл function.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' );
}

Код входит в файл function.php вашей активной дочерней темы (или активной темы).

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...