是否显示图像而不是标记名?

时间:2016-08-02 作者:Michael Rogers

我当前正在使用此代码显示自定义标记:

<?php echo get_the_term_list( $post->ID, \'region\', \'Region: \', \', \', \'<br>\' ); ?>
其输出如下所示:

Region: USA
我想做的是显示一面旗帜,而不是像这样的单词USA、EUR、JPN等:

地区:enter image description here

实现这一目标最简单的方法是什么?过去,我使用了一种非常臃肿的方法,但我想知道一种有效的方法,即旧方法:

$posttags = get_the_tags(); // Get articles tags
$home = get_bloginfo(\'url\'); // Get homepage URL

// Check tagslug.png exists and display it
    echo \'<div class="entry-meta"><span class="tag-links">\';
if ($posttags) {
 foreach($posttags as $tag) {
       $image = "/img/$tag->slug.gif";

       if (file_exists("img/$tag->slug.gif")) {
         echo \'<a href="\' . $home . \'/tag/\' . $tag->slug . \'/">Region:<img title="\' . $tag->name . \'" alt="\' . $tag->name . \'" src="\' . $image . \'"></a>\';

       // If no image found, output no flag version
       } else {

    echo \'<a href="\' . $home . \'/tag/\' . $tag->slug . \'/">\' . $tag->name . \'</a>\';

       }
  }
}
echo "</span>";
echo "</div>";

2 个回复
最合适的回答,由SO网友:Nate Allen 整理而成

一种干净的语义方法是使用CSS。

首先,PHP:

<div class="entry-meta">
    <span class="term-links">
        <?php foreach ( get_the_terms( $post->ID, \'region\') as $term ) : ?>
            <a href="<?php echo esc_url( get_term_link( $term->term_id ) ) ?>">Region: <span class="<?php echo $term->slug ?>"><?php echo $term->name ?></span></a>
        <?php endforeach; ?>
    </span>
</div>
接下来,CSS:

.term-links .usa {
    display: inline-block;
    width: 16px;
    height: 11px;
    background: url(\'http://i.stack.imgur.com/B2K4X.gif\');
    text-indent: 100%;
    white-space: nowrap;
    overflow: hidden;
}
只需为每个区域重复CSS,更改背景URL即可。

SO网友:Mike Eng

我假设您需要一个以逗号分隔的术语列表,其中包含链接。下面是PHP输出:

$post_regions = get_the_terms($post->ID,\'regions\');

//determines what the last region is so we know when to stop inserting commas between multiple regions
$region_keys = array_keys($post_regions);
$last_region_key = array_pop($region_keys);

echo(\'Region: \');
foreach ($post_regions as $key => $value) {
   echo(\'<a href="\'.esc_url(get_tag_link($value->term_id)).\'" class="\'.$value->name.\'" >\'.$value->name.\'</a>\');
    //only insert a comma between if it\'s not the last region
    if ($key != $last_region_key){
      echo(\', \');
    }
 }
当然,根据帖子上的实际条款,它应该以以下HTML结尾:

Region: <a href="#" rel="tag" class="USA">USA</a>, 
<a href="#" rel="tag" class="EUR">EUR</a>, 
<a href="#" rel="tag" class="JPN">JPN</a>, 
<a href="#" rel="tag" class="Antarctica">Antarctica</a>
您可以使用CSS来设置样式。Using Sass, you can save yourself the duplication of writing a declaration for each region using the each directive 像这样:

@each $flag in USA, EUR, JPN {

  a.#{$flag} {
    display:inline-block;
    overflow:hidden;
    width:0;
    height:11px;
    padding-left:16px;
    background:url(\'REPLACE-WITH-YOUR-PATH-TO-IMAGES/#{$flag}.gif\');
  }
}
Live demo on Codepen. 它将忽略您在SCS中未指定的任何区域名称,并显示这些区域名称的文本,但对于它识别的区域名称,它将隐藏文本并显示标志图像。如果不想处理Sass,可以在Codepen中更改CSS下的选项,以显示已编译的CSS并使用它。

相关推荐

Images with overlay

我有一些图片在一个容器中,我想添加一个覆盖和图标。这不是现成的,但我找到了一些有用的代码:HTML:<div class=\"main\"> <span class=\"featured\"><img src=\"http://joshrodg.com/IMG_001-258x258.jpg\" title=\"\" alt=\"\"></span> </div> CSS:.featured {