Как изменить статус вариации продукта, вместо «нет в наличии» — «доступно для предзаказа»?

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

Вот шаги, которые вам следует выполнить:

1. Добавьте следующий код в файл functions.php вашей темы или в файл с пользовательскими функциями WordPress:

function custom_stock_status( $statuses ) {
    $statuses['preorder'] = __( 'Доступно для предзаказа', 'woocommerce' );
    return $statuses;
}
add_filter( 'woocommerce_product_stock_status_options', 'custom_stock_status' );

2. Затем добавьте следующий код в файл functions.php или файл пользовательских функций, чтобы сохранить изменения статуса при редактировании продукта:

function save_custom_stock_status( $product ) {
    $stock = isset( $_POST['_stock_status'] ) ? sanitize_text_field( wp_unslash( $_POST['_stock_status'] ) ) : '';
    
    if ( 'preorder' === $stock ) {
        update_post_meta( $product->get_id(), '_stock_status', 'preorder' );
    }
}
add_action( 'woocommerce_admin_process_product_object', 'save_custom_stock_status' );

3. Теперь вам нужно обновить файл шаблона товара WooCommerce, чтобы отображать новый статус. Создайте файл с именем single-product/add-to-cart/variation.php в директории вашей темы или дочерней темы и добавьте следующий код:

<?php foreach ( $attributes as $attribute_name => $options ) : ?>
    // здесь ваш текущий код для отображения вариаций товара

    <?php 
    $stock_status = $variation->get_stock_status();
    if ( 'preorder' === $stock_status ) {
        echo '<p class="stock in-stock">' . __( 'Доступно для предзаказа', 'woocommerce' ) . '</p>';
    }
    ?>
<?php endforeach; ?>

Сохраните файлы и проверьте ваш интернет-магазин. Теперь у вас должна быть возможность изменить статус вариации продукта с "нет в наличии" на "доступно для предзаказа" и отобразить это новое состояние на странице продукта.