• Никакой политики на форуме. Иначе - бан!
  • Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Решено Как добавить в "Статус остатка" --- "Под заказ" Нужна помощь!

Aleksey_2014

Новичок
Доброй ночи! Подскажите кто знает! В разделе данные товара, есть закладка "запасы" в ней "статус остатка" , с выбором "в наличии/ нет в наличии". Как добавить туда еще "под заказ"? Спасибо!
 

searchingman

Гуру
Местный
Пример добавления нового статуса в админке и вывода его в "карточку" товара.
Код из примера вставляйте в functions.php своей темы.
PHP:
function add_custom_stock_type() {
    ?>
    <script type="text/javascript">
    jQuery(function(){
        jQuery('._stock_status_field').not('.custom-stock-status').remove();
    });
    </script>
    <?php  

    woocommerce_wp_select( array( 'id' => '_stock_status', 'wrapper_class' => 'hide_if_variable custom-stock-status', 'label' => __( 'Stock status', 'woocommerce' ), 'options' => array(
        'instock' => __( 'In stock', 'woocommerce' ),
        'outofstock' => __( 'Out of stock', 'woocommerce' ),
        'onrequest' => __( 'под заказ', 'woocommerce' ), // The new option !!!
    ), 'desc_tip' => true, 'description' => __( 'Controls whether or not the product is listed as "in stock" or "out of stock" on the frontend.', 'woocommerce' ) ) );
}
add_action('woocommerce_product_options_stock_status', 'add_custom_stock_type');
function save_custom_stock_status( $product_id ) {
    update_post_meta( $product_id, '_stock_status', wc_clean( $_POST['_stock_status'] ) );
}
add_action('woocommerce_process_product_meta', 'save_custom_stock_status',99,1);

function woocommerce_get_custom_availability( $data, $product ) {
    switch( $product->stock_status ) {
        case 'instock':
            $data = array( 'availability' => __( 'In stock', 'woocommerce' ), 'class' => 'in-stock' );
        break;
        case 'outofstock':
            $data = array( 'availability' => __( 'Out of stock', 'woocommerce' ), 'class' => 'out-of-stock' );
        break;
        case 'onrequest':
            $data = array( 'availability' => __( 'под заказ', 'woocommerce' ), 'class' => 'on-request' );
        break;
    }
    return $data;
}
add_action('woocommerce_get_availability', 'woocommerce_get_custom_availability', 10, 2);
 

skv-kir

Новичок
Добрый день!
В дополнение к вопросу - "под заказ" , но с указанием срока доставки(изготовления) как реализовать?
И возможно ли указывать срок доставки при оформлении заказа привязываясь к сроку изготовления?
Спасибо!
 

Яна Шолойко

Новичок
Пример добавления нового статуса в админке и вывода его в "карточку" товара.
Код из примера вставляйте в functions.php своей темы.
PHP:
function add_custom_stock_type() {
    ?>
    <script type="text/javascript">
    jQuery(function(){
        jQuery('._stock_status_field').not('.custom-stock-status').remove();
    });
    </script>
    <?php 

    woocommerce_wp_select( array( 'id' => '_stock_status', 'wrapper_class' => 'hide_if_variable custom-stock-status', 'label' => __( 'Stock status', 'woocommerce' ), 'options' => array(
        'instock' => __( 'In stock', 'woocommerce' ),
        'outofstock' => __( 'Out of stock', 'woocommerce' ),
        'onrequest' => __( 'под заказ', 'woocommerce' ), // The new option !!!
    ), 'desc_tip' => true, 'description' => __( 'Controls whether or not the product is listed as "in stock" or "out of stock" on the frontend.', 'woocommerce' ) ) );
}
add_action('woocommerce_product_options_stock_status', 'add_custom_stock_type');
function save_custom_stock_status( $product_id ) {
    update_post_meta( $product_id, '_stock_status', wc_clean( $_POST['_stock_status'] ) );
}
add_action('woocommerce_process_product_meta', 'save_custom_stock_status',99,1);

function woocommerce_get_custom_availability( $data, $product ) {
    switch( $product->stock_status ) {
        case 'instock':
            $data = array( 'availability' => __( 'In stock', 'woocommerce' ), 'class' => 'in-stock' );
        break;
        case 'outofstock':
            $data = array( 'availability' => __( 'Out of stock', 'woocommerce' ), 'class' => 'out-of-stock' );
        break;
        case 'onrequest':
            $data = array( 'availability' => __( 'под заказ', 'woocommerce' ), 'class' => 'on-request' );
        break;
    }
    return $data;
}
add_action('woocommerce_get_availability', 'woocommerce_get_custom_availability', 10, 2);
Спасибо большое за код, очень помог. Помогите, пожалуйста, добавить кнопку "Заказать" при выборе статуса "под заказ", что бы при ее нажатии товар так же добавлялся в корзину.
 

a.kalugin

Форумчанин
Коряво данный хук теперь работает. Во-первых, для единичного товара выводит статус "В наличии" ну а во-вторых, для вариативного товара не работает - там даже не появляется выбор статуса остатка "под заказ"
может у кого есть более свежее решение ?
 

Denkon

Новичок
Коряво данный хук теперь работает. Во-первых, для единичного товара выводит статус "В наличии" ...
так ты в булево значение, которое имеет только 0 или 1 пытаешься внести третье
используй что то типа этого if ( $product->get_stock_quantity() <= '10' )
На одном из сайтов для простого товара так решил проблему
if ( $product->get_stock_quantity() == '1' ) {
$availability['availability'] = 'Под заказ';
}
$availability_html = empty( $availability['availability'] ) ? '' : '<div class="stock-box stock ' . esc_attr( $availability['class'] ) . '">Статус: ' . esc_html( $availability['availability'] ) . '</div>';
а так он у тебя ищет только есть в наличии или нет) поэтому при значении под заказ он выведет "В наличии" даже если в запасе 0 будет стоять
 
Последнее редактирование:

xoxol39

Новичок
Пример добавления нового статуса в админке и вывода его в "карточку" товара.
Код из примера вставляйте в functions.php своей темы.
PHP:
function add_custom_stock_type() {
    ?>
    <script type="text/javascript">
    jQuery(function(){
        jQuery('._stock_status_field').not('.custom-stock-status').remove();
    });
    </script>
    <?php 

    woocommerce_wp_select( array( 'id' => '_stock_status', 'wrapper_class' => 'hide_if_variable custom-stock-status', 'label' => __( 'Stock status', 'woocommerce' ), 'options' => array(
        'instock' => __( 'In stock', 'woocommerce' ),
        'outofstock' => __( 'Out of stock', 'woocommerce' ),
        'onrequest' => __( 'под заказ', 'woocommerce' ), // The new option !!!
    ), 'desc_tip' => true, 'description' => __( 'Controls whether or not the product is listed as "in stock" or "out of stock" on the frontend.', 'woocommerce' ) ) );
}
add_action('woocommerce_product_options_stock_status', 'add_custom_stock_type');
function save_custom_stock_status( $product_id ) {
    update_post_meta( $product_id, '_stock_status', wc_clean( $_POST['_stock_status'] ) );
}
add_action('woocommerce_process_product_meta', 'save_custom_stock_status',99,1);

function woocommerce_get_custom_availability( $data, $product ) {
    switch( $product->stock_status ) {
        case 'instock':
            $data = array( 'availability' => __( 'In stock', 'woocommerce' ), 'class' => 'in-stock' );
        break;
        case 'outofstock':
            $data = array( 'availability' => __( 'Out of stock', 'woocommerce' ), 'class' => 'out-of-stock' );
        break;
        case 'onrequest':
            $data = array( 'availability' => __( 'под заказ', 'woocommerce' ), 'class' => 'on-request' );
        break;
    }
    return $data;
}
add_action('woocommerce_get_availability', 'woocommerce_get_custom_availability', 10, 2);


Спасибо! Код работает, но выводит "В наличии", при выбранном селекте "Под заказ", что и где надо доделать?
 

xoxol39

Новичок
так ты в булево значение, которое имеет только 0 или 1 пытаешься внести третье
используй что то типа этого if ( $product->get_stock_quantity() <= '10' )
На одном из сайтов для простого товара так решил проблему
if ( $product->get_stock_quantity() == '1' ) {
$availability['availability'] = 'Под заказ';
}
$availability_html = empty( $availability['availability'] ) ? '' : '<div class="stock-box stock ' . esc_attr( $availability['class'] ) . '">Статус: ' . esc_html( $availability['availability'] ) . '</div>';
а так он у тебя ищет только есть в наличии или нет) поэтому при значении под заказ он выведет "В наличии" даже если в запасе 0 будет стоять
Где изменить это значение? Что и где доработать, чтобы выводилось "Под заказ" при выборе селекта "под заказ"?
 

xoxol39

Новичок
Коряво данный хук теперь работает. Во-первых, для единичного товара выводит статус "В наличии" ну а во-вторых, для вариативного товара не работает - там даже не появляется выбор статуса остатка "под заказ"
может у кого есть более свежее решение ?
Есть решение?!
 
Сверху Снизу