Отобразить наличие на складе для всех типов продуктов на страницах архива Woocommerce - PullRequest
0 голосов
/ 10 ноября 2018

Я использую этот код при отображении запасов продуктов:

    add_action( 'woocommerce_after_shop_loop_item', 'display_variable_product_stock_quantity', 10 );
function display_variable_product_stock_quantity(){
    wc_get_variable_product_stock_quantity( 'echo_html' );
} 

function show_stock() {
global $product;
if ( $product->stock ) { // if manage stock is enabled 
if ( ! $product->managing_stock() && ! $product->is_in_stock() )
        echo '';
}
if ( number_format($product->stock,0,'','') > 0 ) { // if stock is low
echo '<div class="remainingpc" style="text-align:center;"><font color="red"> ' . number_format($product->stock,0,'','') . ' Pcs Left</font></div>';
} 
else {
echo '<div class="remaining" style="text-align:center;"><font color="red">Out of Stock</font></div>'; 
}
}

add_action('woocommerce_after_shop_loop_item','show_stock', 10);

И если товар является переменной, я использую этот код ответа для отображения наличия на складе:
Получите общий запас всех вариантов из переменного продукта в Woocommerce

Как я могу объединить эти коды в одну условную функцию?

Например. если продукт является простым продуктом, другой код для переменного продукта не будет отображаться.

1 Ответ

0 голосов
/ 10 ноября 2018

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

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

add_action( 'woocommerce_after_shop_loop_item', 'wc_loop_get_product_stock_availability_text', 10 );
function wc_loop_get_product_stock_availability_text() {
    global $wpdb, $product;

    // For variable products
    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 = '".get_the_id()."'
            AND pm.meta_key = '_stock' AND pm.meta_value IS NOT NULL
        ");

        if ( $stock_quantity > 0 ) {
            echo '<p class="stock in-stock">'. sprintf( __("%s in stock", "woocommerce"), $stock_quantity ).'</p>';
        } else {
            if ( is_numeric($stock_quantity) )
                echo '<p class="stock out-of-stock">' . __("Out of stock", "woocommerce") . '</p>';
            else
                return;
        }
    }
    // Other products types
    else {
        echo wc_get_stock_html( $product );
    }
}

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

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