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

Simpler way to display badgeOS thumbnails with custom URL

美好的一天, 我对 php 的有限了解最终造成了一堆代码。我希望有人可以向我展示一种更简单、更简洁的方法来完成此任务。不幸的是,我真的 真的 不擅长 php。

我想要完成的事情

我正在尝试为我的 Wordpress 网站编写一些 badgeOS 图标,link 到相应的课程帖子。换句话说,badge_post_id 的缩略图应该 link 到特定的 lesson_post_id。 'earned' 和 'unearned'.

的徽章缩略图也需要有不同的外观

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

<!-- 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 多个徽章,这是一大堆代码,跟踪起来非常头疼。

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

课时数:$badge_post_id, $lesson_post_id, $lesson_title, $css_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>';
}

$badges 可以是数据库 table 的原始抓取,其中包含列 id、lesson_id、lesson_title 以及您需要的任何其他内容。

@hendr1x 您的帮助使我找到了这个解决方案!我没有将数据输入数组或 table 只使用一次,而是使用了您的代码并将其作为函数放置。

    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);

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