使用自定义 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 和徽章,其余的由函数完成。它似乎工作得很好,而且它确实减少了代码。非常感谢。 :)
美好的一天, 我对 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 和徽章,其余的由函数完成。它似乎工作得很好,而且它确实减少了代码。非常感谢。 :)