В этом уроке я покажу вам, как в WooCommerce ограничить продажу любого товара по времени, без использования плагинов.
Также хочу порекомендовать вам свой видеокурс по созданию интернет-магазина на WooCommerce на основе готовой вёрстки.
Разделим весь наш урок на два шага.
Про настройки товара у меня есть отдельный подробнейший урок, поэтому сейчас я не буду детально на этом останавливаться, покажу вам лишь готовый код.
/** * @snippet Добавление чекбокса ограничения по времени в настройки товара * @author Миша Рудрастых * @url https://misha.agency */ // Шаг1. Добавляем опцию настройки add_action( 'woocommerce_product_options_advanced', 'true_product_options' ); function true_product_options() { echo '<div class="options_group">'; woocommerce_wp_checkbox( array( 'id' => 'purchased_until', 'label' => 'Ограничить по времени', 'description' => 'До 16:00' ) ); echo '</div>'; } // Шаг 2. Сохраняем опцию настройки add_action( 'woocommerce_process_product_meta', 'true_save_product_option', 25, 2 ); function true_save_product_option( $id, $post ){ update_post_meta( $id, 'purchased_until', isset( $_POST[ 'purchased_until' ] ) ? 'yes' : 'no' ); }
Класс, после того, как вы вставили этот код куда нужно, у вас появится чекбокс в Данные товара – Дополнительно.
Это первый шаг. Убедитесь, что чекбокс сохраняет своё значение перед переходом ко второму шагу.
Здесь нам поможет фильтр-хук woocommerce_is_purchasable
.
/** * @snippet Ограничиваем покупку товара в WooCommerce по времени * @author Миша Рудрастых * @url https://misha.agency */ add_filter( 'woocommerce_is_purchasable', 'true_product_time_limit', 25, 2 ); function true_product_time_limit( $purchasable, $product ){ // получаем значение, которое может быть либо "yes", либо "no", либо пустым $purchased_until = get_post_meta( $product->get_id(), 'purchased_until', true ); // нас интересует только значение "yes" if( 'yes' === $purchased_until ) { // подкорректируем текущее время для Москвы, если необходимо // date_default_timezone_set( 'Europe/Moscow' ); // текущий час $current_hour = date( 'H' ); // если уже 16:00 или больше, то делаем товар недоступным для покупки if( $current_hour >= 16 ) { $purchasable = false; } } return $purchasable; }
И снова, не знаете, куда вставлять код?
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.