是否可以在WordPress短码中定义变量,然后使用特定变量调用短码?

时间:2016-04-22 作者:NotSoSmartyPants

这是我第一次尝试制作自己的短代码。

What I am trying to do

我有11种不同的明星评级输出,我希望能够在帖子中使用。我想把它全部打包成一个短代码,并能够调用我想要的特定评级。我想象这样的情况:

[star\\U评级等级=“3”]

这将产生五分之三的星星。

What I know

我已经想出了如何为每个年级使用单独的函数和短代码来实现这一点,但它似乎非常多余。

What I have

这就是我迄今为止所做到的:

function star_rating_5_func( $atts ) {
    $a = shortcode_atts( array(
        \'5\' => \'<i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i>\'

    ), $atts );

    return "{$a[\'5\']}";

}
add_shortcode( \'star_rating_5\', \'star_rating_5_func\' );

function star_rating_4_5_func( $atts ) {
    $a = shortcode_atts( array(
        \'4_5\' => \'<i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star-half-o"></i>\'

    ), $atts );

    return "{$a[\'4_5\']}";

}
add_shortcode( \'star_rating_4_5\', \'star_rating_4_5_func\' );
这将为[star\\U rating\\u 5]和[star\\U rating\\u 4\\u 5]生成五星评级。

我对php不是很熟练,所以在这一点上需要大量的复制和粘贴。我知道你可以定义变量,而且我似乎应该能够简单地调用一个特定的变量来获得我想要的输出。

这可能吗?

[star\\u rating grade=“3”]-示例

2 个回复
最合适的回答,由SO网友:mukto90 整理而成

我想你在找这个-

function star_rating( $atts ) {
$max = 5;
$atts = shortcode_atts(
    array(
        \'grade\' => $max, // default
    ), $atts );

$star_icons = \'\';

$full_star = floor( $atts[\'grade\'] );
for( $i=1; $i<=$full_star; $i++ ) {
    $star_icons .= \'<i class="fa fa-star"></i>\';
}

$half_star = 0;
if( (int) $atts[\'grade\'] != $atts[\'grade\'] ){
    $half_star = 1;
    $star_icons .= \'<i class="fa fa-star-half-o"></i>\';
}

//considering you want to show empty stars as well
$empty_star = $max - $half_star - $full_star;
for( $i=1; $i<=$empty_star; $i++ ) {
    $star_icons .= \'<i class="fa fa-star-o"></i>\';
}

return $star_icons;

}
add_shortcode( \'star_rating\', \'star_rating\' );

Note:

<所有分数都被视为1个半星。我的意思是,2.5和2.6将产生相同的输出

SO网友:Z. Zlatev

你的短代码应该是这样的

function se224467_shotcode_star_rating( $atts ) {

    $a = shortcode_atts( array(
        \'grade\' => 5,
    ), $atts );

    $full_stars = floor( $a[\'grade\'] );

    // full stars
    $output = str_repeat( \'<i class="fa fa-star"></i>\', $full_stars );

    // if not a whole number append a halt
    if ( floatval($full_stars) !== floatval( $a[\'grade\'] ) ) {
        $output .= \'<i class="fa fa-star-half-o"></i>\';
    }

    return $output;
}

add_shortcod( \'star_rating\', \'se224467_shotcode_star_rating\' );
我还没有测试过。你应该可以通过这样的浮动[star_rating grade=3.5]. 事实上,除了整数以外,任何东西都可以得到半颗星。这不能解释空星的原因。请参见mukto90答案。

希望你能明白。

也可以咨询法典Shortcode API - Handling Attributes