Php 使用自定义URL显示badgeOS缩略图的更简单方法

Php 使用自定义URL显示badgeOS缩略图的更简单方法,php,arrays,wordpress,simplify,Php,Arrays,Wordpress,Simplify,你好, 我对php的有限知识最终导致了代码的畸形。我希望有人能给我一个更简单,更干净的方法来实现这一点。不幸的是,我对php的理解非常差 我正在努力实现的目标 我正在尝试为我的Wordpress站点编码一些badgeOS图标,这些图标链接到相应的课程帖子。换句话说,badge_post_id中的缩略图应该链接到特定的lesson_post_id。badge缩略图还需要具有不同的“已赚”和“未赚”外观 我有每个徽章缩略图当前使用的以下代码: <!-- Badge must either be

你好, 我对php的有限知识最终导致了代码的畸形。我希望有人能给我一个更简单,更干净的方法来实现这一点。不幸的是,我对php的理解非常差

我正在努力实现的目标

我正在尝试为我的Wordpress站点编码一些badgeOS图标,这些图标链接到相应的课程帖子。换句话说,badge_post_id中的缩略图应该链接到特定的lesson_post_id。badge缩略图还需要具有不同的“已赚”和“未赚”外观

我有每个徽章缩略图当前使用的以下代码:

<!-- Badge must either be marked earned or unearned -->
<?php if (in_array($badge_post_id, $earned_achievements)) {
    $css_class = 'earned-badge'; }
else {
    $css_class = 'unearned-badge'; }
?>

<!-- Each badge requires this code -->
<span id="lesson-#" class="badge-class">
    <a href="http://example.com/?p=$lesson_post_id" class="badge-link">
        <span class="badge-icon">
            <?php echo badgeos_get_achievement_post_thumbnail($badge_post_id, $image_size, $css_class) ;?>
        </span>
        <span class="badge-name"> LESSON TITLE </span>
    </a>
</span>

我在页面的开头也使用了这个:

<!-- Everything gets this -->
<?php
    $image_size = array(100,100);
    $earned_achievements = badgeos_get_user_earned_achievement_ids(get_current_user_id());
?>

正如你所看到的,对于30多个徽章来说,这是一大堆代码,而且是一个让人头疼的问题

理想情况下,它将从与所有这些信息相关的某种表(可能是某种数组)中提取所有需要的信息:

课程编号:
$badge\u post\u id、$lessure\u post\u id、$lessure\u title、$css\u class
(已获得或未获得)

因此,我可以键入一个更简单的人来获取每个徽章,而不是添加100行代码。

类似的内容

<?php
$earned_achivements = badgeos_get_user_earned_achivement_ids();
$badges = get_badges();


foreach ($badges as $badge){
    if (in_array($badge["id"], $earned_achievements)) {
        echo '<span id="lesson-'.$badge["lesson_id"].'" class="earned-badge">';
        $badge_output = badgeos_get_achievement_post_thumbnail( $badge["id"], $image_size, 'earned-badge' );
    } else {
        echo '<span id="lesson-'.$badge["lesson_id"].'" class="unearned-badge">';
        $badge_output = badgeos_get_achievement_post_thumbnail( $badge["id"], $image_size, 'unearned-badge' );
    }
    echo '<a href="http://example.com/?p='.$badge["lesson_id"].'" class="badge-link">';
    echo '<span class="badge-icon">';
    echo $badge_output;
    echo '</span><span class="badge-name">'.$badge["lesson_title"].'</span>';
    echo '</a></span>';
}
@hendr1x
你的帮助让我找到了这个解决方案!我没有在数组或表中输入只使用一次的数据,而是使用了您的代码并将其作为函数放置

    function badgeosm($lesson_id, $badge_id){

        $image_size = array(100,100);
        $earned_achievements = badgeos_get_user_earned_achievement_ids( get_current_user_id() );
        $css_class = 'unearned-badge'; // Set unearned-badge as the default.

        if (in_array($badge_id, $earned_achievements)) {
                $css_class = 'earned-badge';
            }
        echo '<span id="lesson-ID-'.$lesson_id.'" class="badge-class">';
        echo '<a href="http://example.com/?p='.$lesson_id.'" class="badge-link">';
        echo '<span class="badge-icon">';
        echo badgeos_get_achievement_post_thumbnail( $badge_id, $image_size, $css_class );
        echo '</span>';
        echo '<span class="badge-name">';
        echo get_the_title( $lesson_id );
        echo '</span>';
        echo '</a>';

    }
badgeosm(1961,1770);
函数badgeosm($lesson\u id,$badge\u id){
$image_size=阵列(100100);
$earned_Achatization=badgeos_get_user_earned_Achatization_id(get_current_user_id());
$css_class='Unerned badge';//将Unerned badge设置为默认值。
if(在阵列中($badge\u id,$earned\u成就)){
$css_class=‘赢得的徽章’;
}
回声';
回声';
}
badgeosm(19611770);

现在,我只需输入课程和徽章的id,其余部分由函数完成。它似乎工作得很好,而且肯定会减少代码。非常感谢。:)

这是一个垃圾桶,显示的混乱有点不同,谢谢@hendr1x这看起来确实很有希望!我不知道我怎样才能用这些信息做一张桌子。这只是另一个数组吗?您可以按自己认为合适的方式存储数据。一个数组可以容纳30个徽章……我会使用一个mysql表并进行db查询。