Отобразить наличие на складе для всех типов продуктов на страницах архива Woocommerce

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

    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

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

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

0

Решение

Следующее будет обрабатывать отображение наличия на складе для всех типов продуктов на страницах продуктов архива 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 вашей активной дочерней темы (или активной темы). Проверено и работает.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector