我的WordPress网站的functions.php文件当前具有如下代码块:
function examplecode01() {
$i = '<a href="/path/" class="exampleclass" id="example-code-01"><img class="example01imgclass" src="path/example01.jpg" alt="Example 01"/></a>';
return $i;
}
add_shortcode('example-code-01', 'examplecode01');
其中有5个或更多,每个都有各自的“示例代码##”变体,并且如上所述。简码行允许编辑者指定简码,并将特定的横幅图像拖入Blog帖子中(使用add_shortcode的第一个参数),如下所示:
[example-code-01]
我想做的是随机化,这样编辑者可以在任何地方使用相同的短代码,并且将是可用的随机横幅图像。
为此,我对上述代码块进行了如下修改:
function examplecode01() {
echo '<a href="/path/" class="exampleclass" id="example-code-01"><img class="example01imgclass" src="path/example01.jpg" alt="Example 01"/></a>;
}
(我删除了短代码行,因为这会在下一节的输出中引起问题-请耐心等待)。
好的,所以有几个修改后的代码块,每个代码块都有自己的图像。在它们的最后,我有了一个函数,如下所示:
$functions = array('examplecode01', 'examplecode02', 'examplecode03', 'examplecode04', 'examplecode05');
$functions[array_rand($functions)]();
当我将其放入其他空白的PHP文件(以进行测试)并在线运行时,它会从我列出的文件中输出随机的横幅图像。万岁!成功……之类的。
看,我现在需要的 是编辑者通过短代码调用随机结果的一种方法。不过,我不确定如何做到这一点。原始的简码基本上是[“”在代码块中使用的ID“,”函数名称“]
我考虑过将结果设置为一个变量,然后调用该变量,但是我仍然不确定它如何将(可以说)转换为简码...
有人能帮助我解决难题的最后部分吗?预先谢谢你!
答案 0 :(得分:1)
根据array_rand函数的结果创建简码
我建议您从另一个角度看问题。在我看来,您不想定义一个短代码来显示随机标语,而是从array_rand
调用的结果中创建一个短代码。
如果您需要一个简短的代码来返回随机横幅,则可能会执行以下操作:
function random_banner() {
$banner_indexes = ['01', '02', '03', '04', '05'];
$index = $banner_indexes[array_rand($banner_indexes)];
return sprintf('<a href="/path/" class="exampleclass" id="example-code-%s"><img class="example%simgclass" src="path/example%s.jpg" alt="Example %s"/></a>', $index, $index, $index, $index);
}
add_shortcode('random-banner', 'random_banner');
答案 1 :(得分:0)
这就是我要做的
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}
并要添加横幅,必须创建一个全新的功能和简码。但是,如果使用shortcode属性,则只需将图像添加到数组中。没有“横幅”属性是随机的,否则是数组中的横幅图像编号。保持横幅1
为基础有些麻烦,因为数组基于0
。您可以改用0
来简化它。但是随便...
最后一件事是,每当我编写短代码并将其包装在一个函数中时,您就不必这样做。为了安全起见,这只是我想做的事情。
if(!function_exists('examplecode')){
function examplecode($attr) { ... }
}
基本上,它阻止了它已经定义的功能的定义。