扩展到一个简单的自定义wordpress短代码

时间:2013-02-01 06:51:05

标签: wordpress shortcode

我目前有一个非常基本的短代码,但我想扩展它以便能够为它添加一个参数,例如[fanColours number=3]。基本上,参数将决定在帖子中显示多少图像链接。

function fanColours() {

            return '<div class="fansc clearfix">

                        <h3>Available Colours</h3>

                            <ul class="fan-colours clearfix">

                                <li class="fleft"><a href="' . get_bloginfo('url') . '/content/uploads/2013/01/black_bone.jpg"><img src="' . get_bloginfo('url') . '/content/uploads/2013/01/black_bone_on.jpg" alt="Black" width="87" height="87"></a></li>
                                <li class="fleft"><a href="' . get_bloginfo('url') . '/content/uploads/2013/01/white_bone.jpg"><img src="' . get_bloginfo('url') . '/content/uploads/2013/01/white_bone_on.jpg" alt="White" width="87" height="87"></a></li> 
                                <li class="fleft"><a href="' . get_bloginfo('url') . '/content/uploads/2013/01/yellow_bone.jpg"><img src="' . get_bloginfo('url') . '/content/uploads/2013/01/yellow_bone_on.jpg" alt="Yellow" width="87" height="87"></a></li>

                            </ul>
                    </div>';
}
add_shortcode('fanColours', 'fanColours');

我在网上查了各种方法,发现了一些似乎正朝着正确方向前进的方法,但我不知道如何在上面的代码中实现它。

编辑:所以我现在使用短代码[fanColours number=3]的最终版本如下:

function fanColours( $atts ) {
    $links = array();
        $links[]='<li class="fleft"><a href="' . get_bloginfo('url') . '/content/uploads/2013/01/black_bone.jpg"><img src="' . get_bloginfo('url') . '/content/uploads/2013/01/black_bone_on.jpg" alt="Black" width="87" height="87"></a></li>';

        $links[]='<li class="fleft"><a href="' . get_bloginfo('url') . '/content/uploads/2013/01/white_bone.jpg"><img src="' . get_bloginfo('url') . '/content/uploads/2013/01/white_bone_on.jpg" alt="White" width="87" height="87"></a></li>';

        $links[]='<li class="fleft"><a href="' . get_bloginfo('url') . '/content/uploads/2013/01/red_bone.jpg"><img src="' . get_bloginfo('url') . '/content/uploads/2013/01/red_bone_on.jpg" alt="Red" width="87" height="87"></a></li>';

            extract( shortcode_atts( array(
                'number' => '',
            ) , $atts ) );

    $number = ($number < 0) ? 0 : $number;
            $nr_of_links = ( $number < count( $links ) ) ? $number : count( $links );

            $output = '<div class="fansc clearfix"><h3>Available Bone Colours</h3><ul class="fan-colours clearfix">';

            for( $i = 0; $i < $nr_of_links; $i++ ) {
                $output .= $links[$i];
            }

            $output .=  '</ul></div>';
            return $output;
        }

预先感谢您提供任何帮助或建议,请耐心等待我,因为我仍处于非常陡峭的学习曲线上,希望我已经充分解释了这些内容。

1 个答案:

答案 0 :(得分:1)

extract采用关联数组并将每个键转换为变量。因此,在这种情况下,$number默认值为3。这是因为shortcode_atts将$atts与您提供的数组进行比较,如果未在$atts中设置值,则将其设置为数组中的值。

我想这就是你需要知道的全部内容吗?或者你也需要“神奇”的帮助。

编辑以回应第一条评论:

现在您拥有要显示的最大链接数。有很多方法可以做你想要的。但有一种方式是这样的:

<?php
$links=array();
$links[]='<li class="fleft"><a href="' . get_bloginfo('url') . '/content/uploads/2013/01/black_bone.jpg"><img src="' . get_bloginfo('url') . '/content/uploads/2013/01/black_bone_on.jpg" alt="Black" width="87" height="87"></a></li>';
$links[]='<li class="fleft"><a href="' . get_bloginfo('url') . '/content/uploads/2013/01/white_bone.jpg"><img src="' . get_bloginfo('url') . '/content/uploads/2013/01/white_bone_on.jpg" alt="White" width="87" height="87"></a></li>';
$links[]='<li class="fleft"><a href="' . get_bloginfo('url') . '/content/uploads/2013/01/yellow_bone.jpg"><img src="' . get_bloginfo('url') . '/content/uploads/2013/01/yellow_bone_on.jpg" alt="Yellow" width="87" height="87"></a></li>'

$number = ($number < 0) ? 0 : $number;
$nr_of_links = ( $number < count( $links ) ) ? $number : count( $links );

for( $i = 0; $i < $nr_of_links; $i++ ) {
    echo $links[$i];
}
?>

哪里?是三元运算符,您可以在这里阅读:http://php.net/manual/en/language.operators.comparison.php