【问题标题】:Simpler way to display badgeOS thumbnails with custom URL使用自定义 URL 显示 badOS 缩略图的更简单方法
【发布时间】:2015-11-19 18:29:11
【问题描述】:

美好的一天, 我对 php 的有限知识最终导致了一大堆代码。我希望有人可以向我展示一种更简单、更清洁的方法来实现这一点。不幸的是,我真的 真的 不擅长 php。

我正在努力实现的目标

我正在尝试为我的 Wordpress 网站编写一些徽章图标,这些图标链接到相应的课程帖子。换句话说,badge_post_id 中的缩略图应该链接到特定的 course_post_id。徽章缩略图还需要具有不同的外观,以显示“已获得”和“未获得”。

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

<!-- 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_post_id, $lesson_post_id, $lesson_title, $css_class(已获得或未获得)

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

【问题讨论】:

  • 这是一个pastebin,显示的混乱有点不同link

标签: php arrays wordpress simplify


【解决方案1】:

这样的?

<?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 可以是 db 表的原始抓取,其中包含列 id、lesson_id、lesson_title 以及您需要的任何其他内容。

【讨论】:

  • 谢谢@hendr1x 这看起来确实很有前途!我不确定如何使用该信息制作表格。那只是另一个数组吗?
  • 您可以以任何您认为合适的方式存储数据。一个数组可以容纳 30 个徽章……我会使用 mysql 表并进行 db 查询。
【解决方案2】:

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

现在我只需输入课程的 ID 和徽章,剩下的就交给函数了。它似乎运行良好,并且肯定会减少代码。非常感谢。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 2022-09-29
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 2014-12-13
    相关资源
    最近更新 更多