#javascript #php #wordpress #datetime #woocommerce
#javascript #php #wordpress #дата и время #woocommerce
Вопрос:
Итак, у меня есть часы, которые я в настоящее время использую для выполнения многих задач в магазине Woocommerce. Он отлично работает и выполняет свою работу.
Я использую ‘open’, ‘closed’ и ‘last_call’ для отображения сообщений в разных областях сайта. Это также отключает определенные вещи в оформлении заказа в зависимости от открытого статуса и т.д.
Что я хотел бы сделать, так это использовать эту функцию для отображения «Мы снова откроемся завтра в 9:00 утра» или, если время открытия достаточно близко, «Мы снова откроемся в 9:00 утра (через 1 час и 23 минуты)».
Это код, который у меня есть. Нужно ли мне повторно использовать эту функцию и, по сути, дублировать большую ее часть или есть более чистый способ добиться этого?
(PS. Часы хранения извлекаются из поля даты / времени ACF на странице пользовательских параметров)
TIA
// -------------------------------------------
// STORE CLOCK
// -------------------------------------------
function store_clock() {
$weekday_open = get_field('weekday_open', 'options');
$sat_open = get_field('sat_open', 'options');
$sun_open = get_field('sun_open', 'options');
$weekday_close = get_field('weekday_close', 'options');
$sat_close = get_field('sat_close', 'options');
$sun_close = get_field('sun_close', 'options');
$store_closed = get_field('close_store', 'options');
$store_times = array(
array( //Sunday
'open' => $sun_open,
'close' => $sun_close,
),
array( //Monday
'open' => $weekday_open,
'close' => $weekday_close,
),
array( //Tuesday
'open' => $weekday_open,
'close' => $weekday_close,
),
array( //Wednesday
'open' => $weekday_open,
'close' => $weekday_close,
),
array( //Thursday
'open' => $weekday_open,
'close' => $weekday_close,
),
array( //Friday
'open' => $weekday_open,
'close' => $weekday_close,
),
array( //Saturday
'open' => $sat_open,
'close' => $sat_close,
),
);
$current_day = date( 'w', current_time('timestamp') ); //Numeric representation of the day (0 for Sunday, 6 for Saturday)
$current_date = date( 'd F Y', current_time('timestamp') );
if ( $store_times[$current_day] !== false amp;amp; $store_closed !== true ) {
$opening_time = strtotime( sprintf( '%s %s', $current_date, $store_times[$current_day]['open'] ) );
$closing_time = strtotime( sprintf( '%s %s', $current_date, $store_times[$current_day]['close'] ) );
if ( $closing_time - current_time('timestamp') > 0 amp;amp; $closing_time - current_time('timestamp') < 1800 ) {
return 'last_call';
} elseif ( $opening_time > current_time('timestamp') || $closing_time < current_time('timestamp') ) {
return 'closed';
} else {
return 'open';
}
} else {
return 'closed';
}
}
Ответ №1:
Я бы предложил повторно использовать этот фрагмент кода для возврата массива, возвращая как текущий статус, так и статус на следующий день. Вы также можете учитывать дату следующего открытия для расширенных периодов закрытия,
// -------------------------------------------
// STORE CLOCK
// -------------------------------------------
function store_clock() {
$weekday_open = get_field('weekday_open', 'options');
$sat_open = get_field('sat_open', 'options');
$sun_open = get_field('sun_open', 'options');
$weekday_close = get_field('weekday_close', 'options');
$sat_close = get_field('sat_close', 'options');
$sun_close = get_field('sun_close', 'options');
$store_closed = get_field('close_store', 'options');
$store_times = array(
array( //Sunday
'open' => $sun_open,
'close' => $sun_close,
),
array( //Monday
'open' => $weekday_open,
'close' => $weekday_close,
),
array( //Tuesday
'open' => $weekday_open,
'close' => $weekday_close,
),
array( //Wednesday
'open' => $weekday_open,
'close' => $weekday_close,
),
array( //Thursday
'open' => $weekday_open,
'close' => $weekday_close,
),
array( //Friday
'open' => $weekday_open,
'close' => $weekday_close,
),
array( //Saturday
'open' => $sat_open,
'close' => $sat_close,
),
);
$current_day = date( 'w', current_time('timestamp') ); //Numeric representation of the day (0 for Sunday, 6 for Saturday)
$current_date = date( 'd F Y', current_time('timestamp') );
if ( $store_times[$current_day] !== false amp;amp; $store_closed !== true ) {
$opening_time = strtotime( sprintf( '%s %s', $current_date, $store_times[$current_day]['open'] ) );
$closing_time = strtotime( sprintf( '%s %s', $current_date, $store_times[$current_day]['close'] ) );
if ( $closing_time - current_time('timestamp') > 0 amp;amp; $closing_time - current_time('timestamp') < 1800 ) {
return array('last_call', null);
} elseif ( $opening_time > current_time('timestamp') || $closing_time < current_time('timestamp') ) {
return array('closed', (isset($store_times[$current_day 1]) ? $store_times[$current_day 1]['open'] : $store_times[0]['open']));
} else {
return array('open', null);
}
} else {
return array('closed', (isset($store_times[$current_day 1]) ? $store_times[$current_day 1]['open'] : $store_times[0]['open']));
}
}