Это указано в документах :
Обратите внимание, что функция, вызываемая шорткодом, никогда не должна выдавать никаких результатов. Функции шорткода должны возвращать текст, который должен использоваться для замены шорткода.
попробуйте с этим, и не стесняйтесь комментировать, если есть какие-либо проблемы:
// [time]
function displaytime(){
if (date('l') == 'Saturday' || date('l') == 'Sunday'){
return '8:00-9:00AM';
}else{ //it's a weekday
return '6:00-7:00AM';
}
}
add_shortcode('time', 'displaytime');
// end display time
РЕДАКТИРОВАТЬ после обновления вопроса: Причина, по которой оно отображает одно и то же время для всех 7 мест, заключается в том, что ваши первоначальные тесты кода date('l')
, которые учитывают только текущий день, отображают '6: 00-7 : 00:00 везде, если текущий день не суббота или воскресенье, или 8:00 - 9:00 везде. В дополнение к этому вы создаете 8 различных шорткодов, когда только одного должно хватить на 7 дней, и последний на время должен быть объединен, иначе он не сможет узнать, какой день мы рассматриваем.
РЕДАКТИРОВАНИЕ 2 : добавлен код, чтобы установить настройку часового пояса wordpress для функции, а затем восстановить ее исходную настройку, которая была до функции.
обновлен код с одним шорткодом для всех (теперь вы учитесь добавлять атрибуты к шорткоду!):
// use examples: [nextdaytime day="+1 day"] [nextdaytime day="+2 day"]
function displaynextdaytime($atts){
$originalZone = date_default_timezone_get(); //save timezone
date_default_timezone_set(get_option('timezone_string')); //set it to your admin value
$time = strtotime($atts['day']); //time for the date() function based on our 'day' attribute
if (date('l', $time) == 'Saturday' || date('l', $time) == 'Sunday'){
$timeStr = '8:00-9:00AM';
}else{ //it's a weekday
$timeStr = '6:00-7:00AM';
}
$returnVal = date('D, M j.', $time) . ' ' . $timeStr;
date_default_timezone_set($originalZone) //restore original zone
return $returnVal;
}
add_shortcode('nextdaytime', 'displaynextdaytime');
// end display next day and time