Denne kodepakke til WordPress giver dig to indbyggede shortcodes, som håndterer og viser virksomhedens åbningstider fuldautomatisk – uden eksterne plugins, kun ren PHP.
[business_status]Viser live-status (“Telefonen er åben / lukket”):
Læser den aktuelle dato og tid fra WordPress’ tidszone – intet behov for manuelt tidsjustering.
Tjekker først, om dagen er en ferielukkedag; hvis ja, vises en ferietekst.
Hvis ikke feriedag, kontrolleres weekend-lukning.
Finder derefter dagens åbningstider – enten de normale ugedagstider eller en special-dags-tabel med afvigende timer.
Sammenligner tider via strtotime() for sikker håndtering af tider som rigtige timestamps.
Returnerer en <div> med passende SVG-ikon og tekst, så frontenden kan styles frit.
[business_schedule]Genererer en oversigt med:
Normale åbningstider for alle ugedage
Liste over ferielukkedage
Liste over specifikke åbningsdage (custom days)
Den markerer automatisk den aktuelle dag med klassen today, i den liste hvor den faktisk hører til:
Hvis i dag er ferielukket → markeres i “Andre lukkedage”.
Hvis i dag har særlige timer → markeres i “Specielle åbningsdage”.
Ellers markeres dagens ugedagslinje i de normale tider.
/* -------------------------------------------------
* Fælles konfiguration til åbningstider
* ------------------------------------------------- */
function my_business_config() {
return [
'weekday_hours' => [ // standard pr. ugedag
'Monday' => ['start' => '08:30', 'end' => '16:30'],
'Tuesday' => ['start' => '08:30', 'end' => '16:30'],
'Wednesday' => ['start' => '08:30', 'end' => '16:30'],
'Thursday' => ['start' => '08:30', 'end' => '16:30'],
'Friday' => ['start' => '08:30', 'end' => '16:30'],
'Saturday' => ['start' => 'Closed', 'end' => 'Closed'],
'Sunday' => ['start' => 'Closed', 'end' => 'Closed'],
],
'holiday_dates' => [ // ferielukkedage
'24-12-2025',
'25-12-2025',
],
'custom_days' => [ // special-dage
/*'06-06-2025' => ['start' => '08:30', 'end' => '13:30'],*/
],
];
}
/* -------------------------------------------------
* [business_status] – samme som før (uforandret)
* ------------------------------------------------- */
function business_status_shortcode() {
$cfg = my_business_config();
$weekday_hours = $cfg['weekday_hours'];
$holiday_dates = $cfg['holiday_dates'];
$custom_days = $cfg['custom_days'];
$now = current_datetime(); // WP-tidszone:contentReference[oaicite:2]{index=2}
$day_en = $now->format('l');
$date_dmy = $now->format('d-m-Y');
$time_hi = $now->format('H:i');
$icon = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="24" height="24"><path d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512z"/></svg>';
$open = 'Telefonen er åben';
$closed= 'Telefonen er lukket';
$holiday = 'I dag har vi lukket, akut ring: +45 28 43 40 02';
if (in_array($date_dmy,$holiday_dates,true))
return '<div class="business-status holiday">'.$icon.' '.$holiday.'</div>';
if ($day_en==='Saturday'||$day_en==='Sunday')
return '<div class="business-status closed">'.$icon.' '.$closed.'</div>';
$hours = $weekday_hours[$day_en];
if (isset($custom_days[$date_dmy])) $hours = $custom_days[$date_dmy];
if ($hours['start']==='Closed')
return '<div class="business-status closed">'.$icon.' '.$closed.'</div>';
$now_ts = strtotime($time_hi);
if ($now_ts >= strtotime($hours['start']) && $now_ts <= strtotime($hours['end']))
return '<div class="business-status open">'.$icon.' '.$open.'</div>';
return '<div class="business-status closed">'.$icon.' '.$closed.'</div>';
}
add_shortcode('business_status','business_status_shortcode');
/* -------------------------------------------------
* [business_schedule] – med .today-markering
* ------------------------------------------------- */
function business_schedule_shortcode() {
$cfg = my_business_config();
$weekday_hours = $cfg['weekday_hours'];
$holiday_dates = $cfg['holiday_dates'];
$custom_days = $cfg['custom_days'];
$now = current_datetime();
$day_en = $now->format('l');
$date_dmy = $now->format('d-m-Y');
$da_days = [
'Monday'=>'Mandag','Tuesday'=>'Tirsdag','Wednesday'=>'Onsdag',
'Thursday'=>'Torsdag','Friday'=>'Fredag','Saturday'=>'Lørdag','Sunday'=>'Søndag',
];
ob_start(); ?>
<div class="business-schedule">
<!-- Normale åbningstider -->
<div class="opening-hours-box">
<h5>Normale åbningstider</h5>
<ul>
<?php foreach ($weekday_hours as $en=>$h):
// markér kun hvis i dag og IKKE holiday/custom
$today = ($en===$day_en && !in_array($date_dmy,$holiday_dates,true) && !isset($custom_days[$date_dmy])) ? ' class="today"' : '';
$times = ($h['start']==='Closed') ? 'Lukket' : $h['start'].' - '.$h['end']; ?>
<li<?= $today ?>><?= $da_days[$en] ?>: <?= $times ?></li>
<?php endforeach; ?>
</ul>
</div>
<!-- Ferielukkede dage -->
<?php if ($holiday_dates): ?>
<div class="opening-hours-box">
<h5>Andre lukkedage</h5>
<ul>
<?php foreach ($holiday_dates as $d):
$today = ($d===$date_dmy) ? ' class="today"' : ''; ?>
<li<?= $today ?>><?= $d ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
<!-- Specielle åbningsdage -->
<?php if ($custom_days): ?>
<div class="opening-hours-box">
<h5>Specielle åbningsdage</h5>
<ul>
<?php foreach ($custom_days as $d=>$h):
$today = ($d===$date_dmy) ? ' class="today"' : ''; ?>
<li<?= $today ?>><?= $d ?>: <?= $h['start'] ?> - <?= $h['end'] ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
</div>
<?php
return ob_get_clean();
}
add_shortcode('business_schedule','business_schedule_shortcode');/* Åbningstider Status */
.business-status {
color: white;
font-size: 14px;
font-weight: 500;
display: flex;
align-items: center;
gap: 10px;
}
.business-status svg {
width: 8px !important;
}
.business-status.open {
fill: #15FF00;
}
.business-status.closed {
fill: #FF0000;
}
.business-status.holiday {
fill: #FF0000;
}
/* Åbningstider Popup */
.business-schedule {
display: flex;
flex-direction: column;
gap: 20px;
}
.business-schedule .opening-hours-box h5 {
margin: 0px;
margin-bottom: 6px;
}
.business-schedule .opening-hours-box ul {
list-style-type: none;
padding: 0px;
display: flex;
flex-direction: column;
gap: 6px;
}
.business-schedule .opening-hours-box ul li {
background: var(--e-global-color-secondary);
padding: 4px 8px;
border-radius: 4px;
}
.business-schedule .opening-hours-box ul li.today {
font-weight: 800;
border-left: 4px solid var(--e-global-color-text);
}