Как ограничить продажу товара по времени

В этом уроке я покажу вам, как в WooCommerce ограничить продажу любого товара по времени, без использования плагинов.

Также хочу порекомендовать вам свой видеокурс по созданию интернет-магазина на WooCommerce на основе готовой вёрстки.

Разделим весь наш урок на два шага.

1. Добавление настроек товара

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

/**
 * @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

Это первый шаг. Убедитесь, что чекбокс сохраняет своё значение перед переходом ко второму шагу.

2. Делаем товар недоступным к покупке в определённое время

Здесь нам поможет фильтр-хук 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;
}

И снова, не знаете, куда вставлять код?

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школах Epic Skills и LoftSchool.

Если вам нужна помощь с сайтом или разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда будем рады вам помочь!