Текстовое значение Woocommerce «Обратный заказ» в зависимости от фактического времени выполнения заказа

#php #wordpress #woocommerce

Вопрос:

У меня есть много продуктов с разными сроками выполнения заказов. Я создал значение ВЫБОРА в зависимости от типа продукта, и это показывает мне разное время выполнения для отдельных продуктов. Когда я указываю время выполнения заказа для всех имеющихся у меня продуктов, это хорошо работает. До того момента, пока я не захочу изменить сроки выполнения заказа. У меня разные бренды, и у них разное время выполнения заказов, и они, как правило, время от времени меняются. Я бы не хотел менять все продукты вручную, если это произойдет. Я хотел бы создать код для различных типов продуктов, и я хотел бы иметь возможность время от времени легко изменять время выполнения заказа.

Я создал опцию «Выбрать» для продуктов, чтобы я мог изменить желаемое время выполнения заказа. У одного бренда есть 5 дней, у другого-10 дней и т. Д. Но, к сожалению, когда я обновляю значение времени выполнения заказа в коде в functions.php, продукты не будут обновляться до фактического обновления продуктов в администраторе. Это приводит к неправильной работе моего кода, потому что мне все равно придется вручную обновлять все продукты при изменении сроков выполнения заказа.

Было бы здорово, если бы у меня были какие-то переменные в коде, где у меня была бы возможность изменять переменные после, а затем автоматически обновлять время выполнения заказа на продукцию. Это код, который у меня сейчас есть — этот код работает как заклинание, но только тогда, когда мне не нужно изменять время выполнения заказа.

Кто-нибудь знает, как добиться такой динамики? Я хотел бы время от времени обновлять время выполнения заказов для брендов x, y и z, и мне нужно, чтобы продукты автоматически обновляли время выполнения заказов. Спасибо!

  // Add a custom field in admin product edit pages - inventory tab
add_action( 'woocommerce_product_options_stock_fields', 'add_product_options_stock_custom_field', 20 );
function add_product_options_stock_custom_field() {
    global $product_object, $post;


// Select
woocommerce_wp_select( array( 
    'id'      => '_backorder_text', 
    'label'   => __( 'Backorders text', 'woocommerce' ), 
    'description' => __( 'Backorders text. Add a custom backorders text to be displayed when products are on backorders.', 'woocommerce' ),
    'options' => array(
        ''         => __( '', 'woocommerce' ),
        'Shipping: 1 day'   => __( 'Brand x', 'woocommerce' ),
        'Shipping: 3-5 days'   => __( 'Brand y', 'woocommerce' ),
        'Shipping: 5-10 days' => __( 'Brand z', 'woocommerce' )
        )
    )
);

    // jQuery: HIDE the fied if backorders are not enabled
    ?>
    <script type="text/javascript">
    jQuery( function($){
        var a = 'select#_backorders',
            b = 'p._backorder_text_field';

        if( $(a).val() === 'no' )
            $(b).hide();

        $(a).on('change blur', function(){
            if( $(a).val() === 'no' )
                $(b).hide();
            else
                $(b).show();
        });
    });
    </script>
    <?php
}

// Save the custom field value from admin product edit pages - inventory tab
add_action( 'woocommerce_process_product_meta', 'save_product_options_stock_custom_field', 20, 1 );
function save_product_options_stock_custom_field( $product_id ) {
    if ( isset( $_POST['_backorder_text'] ) )
        update_post_meta( $product_id, '_backorder_text', sanitize_text_field( $_POST['_backorder_text'] ) );
}

// Variations: Add a custom field in admin variation options inventory
add_action( 'woocommerce_variation_options_inventory', 'add_variation_settings_fields', 20, 3 );
function add_variation_settings_fields( $loop, $variation_data, $variation_post ) {

    woocommerce_wp_text_input( array(
        'id'            => '_backorder_text'.$loop,
        'name'          => '_backorder_text['.$loop.']',
        'value'         => get_post_meta( $variation_post->ID, '_backorder_text', true ),
        'type'          => 'text',
        'label'         => __( 'Backorders text', 'woocommerce' ),
        'description'   => __( 'Backorders text. Add a custom backorders text to be displayed when products are on backorders.', 'woocommerce' ),
        'desc_tip'      => true,
        'wrapper_class' => 'form-row form-row-first',
    ) );
}

// Variations: Save a custom field value from admin variation options inventory
add_action( 'woocommerce_save_product_variation', 'save_variation_settings_fields', 10, 2 );
function save_variation_settings_fields( $variation_id, $i ) {
    if( isset( $_POST['_backorder_text'][$i] ) )
        update_post_meta( $variation_id, '_backorder_text', sanitize_text_field( $_POST['_backorder_text'][$i] ) );
}

add_filter( 'woocommerce_get_availability', 'custom_on_backorder_text', 10, 2 );
function custom_on_backorder_text( $availability, $product ) {
    $backorder_text = get_post_meta( $product->get_id(), '_backorder_text', true );

    if( $availability['class'] === 'available-on-backorder' amp;amp; ! empty( $backorder_text ) )
        $availability['availability'] = $backorder_text;

    return $availability;
}