шорткод для вставки текста в зависимости от дня недели - PullRequest
0 голосов
/ 28 июня 2018

Я хотел бы создать шорткод [time], который будет отображать 6: 00-7: 00 утра каждый день, кроме субботы или воскресенья, так как эти два дня будут отображать время 8: 00-9: 00 утра. Как бы я это сделал?

Это то, что я придумал ...

// [time]  
function displaytime(){  
if (date('l') == 'Saturday' || date('l') == 'Sunday')){
   echo '8:00-9:00AM';
}else{ //it's a weekday
echo '6:00-7:00AM';
   }
}  
add_shortcode('time', 'displaytime'); 
// end display time

Как это выглядит в настоящее время ... (рядом с Сб и Солнцем должно отображаться 8: 00-9; 00:00) enter image description here У меня есть 7 шорткодов для отображения следующих 7 дней недели. Так что, возможно, именно это заставляет его работать неправильно?

// [tomorrow]  
function displaydate_tomorrow(){  
    return date('D, M j.', strtotime('+1 day')); 
}  
add_shortcode('tomorrow', 'displaydate_tomorrow'); 
// end tomorrows date
// [tomorrow2]  
function displaydate_tomorrow2(){  
    return date('D, M j.', strtotime('+2 day')); 
}  
add_shortcode('tomorrow2', 'displaydate_tomorrow2'); 
// end tomorrows date2
// [tomorrow3]  
function displaydate_tomorrow3(){  
    return date('D, M j.', strtotime('+3 day')); 
}  
add_shortcode('tomorrow3', 'displaydate_tomorrow3'); 
// end tomorrows date3
// [tomorrow4]  
function displaydate_tomorrow4(){  
    return date('D, M j.', strtotime('+4 day')); 
}  
add_shortcode('tomorrow4', 'displaydate_tomorrow4'); 
// end tomorrows date4
// [tomorrow5]  
function displaydate_tomorrow5(){  
    return date('D, M j.', strtotime('+5 day')); 
}  
add_shortcode('tomorrow5', 'displaydate_tomorrow5'); 
// end tomorrows date5
// [tomorrow6]  
function displaydate_tomorrow6(){  
    return date('D, M j.', strtotime('+6 day')); 
}  
add_shortcode('tomorrow6', 'displaydate_tomorrow6'); 
// end tomorrows date6
// [tomorrow7]  
function displaydate_tomorrow7(){  
    return date('D, M j.', strtotime('+7 day')); 
}  
add_shortcode('tomorrow7', 'displaydate_tomorrow7'); 
// end tomorrows date7
// [time]  
function displaytime(){  
    if (date('D') == 'Saturday' || date('D') == 'Sunday'){
        return '8:00-9:00AM';
    }else{ //it's a weekday
        return '6:00-7:00AM';
    }
}  
add_shortcode('time', 'displaytime'); 
// end display time

1 Ответ

0 голосов
/ 28 июня 2018

Это указано в документах :

Обратите внимание, что функция, вызываемая шорткодом, никогда не должна выдавать никаких результатов. Функции шорткода должны возвращать текст, который должен использоваться для замены шорткода.

попробуйте с этим, и не стесняйтесь комментировать, если есть какие-либо проблемы:

// [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
...