Вот как бы я это сделал
function examplecode01(){
return __FUNCTION__;
}
function examplecode02(){
return __FUNCTION__;
}
function examplecode03(){
return __FUNCTION__;
}
function examplecode04(){
return __FUNCTION__;
}
function examplecode05(){
return __FUNCTION__;
}
function examplecode() {
$functions = array('examplecode01', 'examplecode02', 'examplecode03', 'examplecode04', 'examplecode05');
shuffle($functions); //randomize array
$function = array_shift($functions); //get first array element
return function_exists($function) ? $function() : '';
}
//add_shortcode('example-code-random', 'examplecode');
echo examplecode();
Песочница
* "Волшебная" константа __FUNCTION__
- это имя текущей функции, вы можетезамените его своим реальным кодом, это просто упрощает просмотр того, какая функция была вызвана.
Если честно, вместо того, чтобы делать это examplecode01
и examplecode02
(итерационные функции), я бы просто сделал один короткий код(чтобы управлять ими всеми), например:
[examplecode] //random
[examplecode banner="1"] //examplecode01
И так далее, это будет легко расширить позже.Примерно так:
function examplecode($attr) {
$banners = array('example01.jpg', 'example02.jpg', 'example03.jpg', 'example04.jpg', 'example05.jpg');
$atts = shortcode_atts(array(
'banner' => false
), $atts );
if($atts['banner'] && isset($banners[$atts['banner']-1])){
//make sure to check if the index exists
//you could handle this differently, such as not show a banner, show an error message etc...
$index = $atts['banner']-1; //0 based vs 1 based
}else{
$index = rand(0, (count($banners)-1));
}
//pad with a leading 0 if less then 2
$i = str_pad($index+1, 2, '0', STR_PAD_LEFT);
return '<a href="/path/" class="exampleclass" id="example-code-'.$i.'"><img class="example'.$i.'imgclass" src="path/'.$banners[$index].'" alt="Example '.$i.'"/></a>';
}
add_shortcode('examplecode', 'examplecode');
Посмотрите, если вы сделаете function{n}
и хотите добавить баннер, вам нужно создать совершенно новую функцию и шорткод.Однако, если вы используете атрибуты шорткода, вам нужно только добавить изображение в массив.Нет атрибута banner, это случайно, в противном случае это номер изображения баннера из массива.Есть немного покачиваний, чтобы ваши баннеры основывались на 1
, потому что массивы основаны на 0
.Вы можете упростить это, начав вместо 0
.Но что бы ни ...
Последнее, что я пишу шорткоды, я заключаю их в функцию, которая существует, вам не нужно этого делать.Это просто то, что мне нравится делать, просто чтобы быть в безопасности.
if(!function_exists('examplecode')){
function examplecode($attr) { ... }
}
По сути, это мешает ему определить функцию, если она уже была определена.