根据array_rand函数的结果创建简码

时间:2018-10-18 16:29:20

标签: php arrays wordpress variables shortcode

我的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“,”函数名称“]

我考虑过将结果设置为一个变量,然后调用该变量,但是我仍然不确定它如何将(可以说)转换为简码...

有人能帮助我解决难题的最后部分吗?预先谢谢你!

2 个答案:

答案 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();

Sandbox

__FUNCTION__“魔术”常量是当前函数的名称,您可以将其替换为实际的代码,这只会使看到什么函数变得容易一些。

说实话,而不是这样做examplecode01examplecode02(迭代函数),我只会编写一个短代码(将它们全部统治),例如:

[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) { ... }
}

基本上,它阻止了它已经定义的功能的定义。