在小部件中动态显示字体图标

时间:2014-07-01 作者:user34872

总之,有一个电影评论网站,我给它打分。目前我正在使用一个工作正常的小部件。。。但是我把我所有的分数都改成了五星评级系统(3.5/5、5/5等),所以使用它的小部件根据百分比填充进度条(70分将填充70%的进度条等等),现在只显示该进度条的3.5%。

我想做的是使用字体为awesome的星星,而我在我的网站上确实有这样的字体。

但是我在修改小部件代码以满足我的新需求方面遇到了困难。

我想知道我是否需要为每一个都做一个案例,或者是否有更简单的方法?我所说的“case”是指(我是用英语而不是代码说的)“如果电影的分数是1/5,那么显示一个满星,然后显示四个空星。”等等或者,有没有一种方法可以根据我动态生成的分数显示字体awesome stars?

如果有帮助,我的小部件代码如下:

<?php
global $wp_query;
$postid = $wp_query->post->ID;
if( get_post_meta($postid, \'RankVideo\', true))  {
echo \'<div class="bar_mortice rounded"><div class="progress rounded" style="width: \' .        get_post_meta($postid, \'RankVideo\', true) . \'%"></div></div>\';
} elseif( get_post_meta($postid, \'ecpt_rankvideo\', true)) {
echo \'<div class="bar_mortice rounded"><div class="progress rounded" style="width: \' .        get_post_meta($postid, \'ecpt_rankvideo\', true) . \'%"></div></div>\';
} 
?>
因此,基本上,我正在寻找对上述小部件代码的必要编辑,以使其显示基于五星评级系统的星形字体可怕图标,而不是我之前使用的base 100系统。

有意义吗?

1 个回复
SO网友:Matt Royal

这更多的是我收集到的PHP问题,但希望这将有助于或至少让您走上正轨。我在这里做了一些假设,比如你已经打电话给FontAwesome并在你的网站上工作了。

我也不知道为什么你有2个get_post_meta(); 条件语句中的函数对每个条件都有相同的输出,这对我来说没有意义,但我已经按照您在下面的示例代码中的方式将其包括在内。

你可以试试这个,我添加了一些注释,这样你就可以理解其中的逻辑:

<?php
global $wp_query;
$postid = $wp_query->post->ID;

if( get_post_meta($postid, \'RankVideo\', true))  {

    $metabox_value = get_post_meta($postid, \'RankVideo\', true);

    // Evaluates the string and converts it to integar or float value
    if ( strpos( $metabox_value, \'.\' ) === false ) {
        $ranking = (int)$metabox_value;
    } else {
        $ranking = (float)$metabox_value;
    }

    if( is_float( $ranking ) ) { // Check to see if whole number or decimal
        $rounded_ranking = round($ranking); // If decimal round it down to a whole number
        echo \'<div class="bar_mortice rounded">\';
        // For Loop so we can run the stars as many times as is set, with offset of 2 to because we adding half star statically adter our For loop
        for ($counter=2; $counter <= $rounded_ranking; $counter++){ 
            echo \'<i class="fa fa-star"></i>\';
        }
        echo \'<i class="fa fa-star-half-o"></i><div>\'; // Static half star used as the ranking value is a decimal and the is_float condition is met.

    } 

    else {
        echo \'<div class="bar_mortice rounded">\';
        // For Loop so we can run the stars as many times as is set, no offset need, as no half star required for whole number rankings
        for ($counter=1; $counter <= $ranking; $counter++){
            echo \'<i class="fa fa-star"></i>\';
        }
    }

} 


elseif( get_post_meta($postid, \'ecpt_rankvideo\', true)) {

    $metabox_value = get_post_meta($postid, \'ecpt_rankvideo\', true);

    // Evaluates the string and converts it to integar or float value
    if ( strpos( $metabox_value, \'.\' ) === false ) {
        $ranking = (int)$metabox_value;
    } else {
        $ranking = (float)$metabox_value;
    }

    if( is_float( $ranking ) ) {
        $rounded_ranking = round($ranking);
        echo \'<div class="bar_mortice rounded">\';
        for ($counter=2; $counter <= $rounded_ranking; $counter++){
            echo \'<i class="fa fa-star"></i>\';
        }
        echo \'<i class="fa fa-star-half-o"></i><div>\';

    } 

    else {
        echo \'<div class="bar_mortice rounded">\';
        for ($counter=1; $counter <= $ranking; $counter++){
            echo \'<i class="fa fa-star"></i>\';
        }
    }
} 
?>

结束