WordPress中get_tag_link()返回空值,循环内获取标签链接求助
如何在WordPress文章循环中获取标签ID并使用get_tag_link()?
我明白你的问题了——你想在文章循环里用对应标签的链接包裹缩略图,但直接传$tag_id变量没用,因为你还没正确获取当前文章的标签ID。这里给你一步步解决的方法:
首先,WordPress里每篇文章可能关联多个标签,所以我们需要先获取当前文章的标签集合,再从中提取标签ID。另外要注意:the_post_thumbnail()是直接输出内容的,如果你要把它拼在echo的字符串里,得用get_the_post_thumbnail()(它返回HTML字符串而不是直接输出),不然会出现输出顺序错乱的问题。
修改后的完整代码:
if (have_posts()) { while (have_posts()) { the_post(); // 获取当前文章的标签数组 $tags = get_the_tags(); // 默认标签链接设为文章链接(如果没有标签的话降级处理) $tag_link = get_permalink(); if ($tags && !is_wp_error($tags)) { // 取第一个标签的ID,获取对应的标签链接 $first_tag_id = $tags[0]->term_id; $tag_link = get_tag_link($first_tag_id); } echo ' <article class="blog-post col-12 col-sm-8 offset-sm-2 col-md-6 offset-md-0 col-lg-4 mb-5 mb-md-0"> <header class="col-12 mb-3 text-center"> <a href="', esc_url($tag_link), '">', get_the_post_thumbnail(get_the_ID(), [300, 200]), '</a> </header> <div class="col-12 mb-3 text-center"> <small>', the_category(' '), '</small> </div> <div class="col-12 mx-auto mb-3"> <h2 class="h2"> <a href="', esc_url(get_permalink()), '">', get_the_title(), '</a> </h2> </div> <div class="col-12 mx-auto mb-3"> <p class="lead">', get_the_excerpt(), '</p> </div> </article> '; } }
关键说明:
get_the_tags():获取当前文章的所有标签,返回一个WP_Term对象数组,如果文章没有标签则返回false。- 我们做了容错处理:如果没有标签,就用文章本身的链接作为降级,避免出现空链接。
- 使用
esc_url()包裹链接:这是WordPress的安全最佳实践,防止XSS漏洞。 - 替换
the_post_thumbnail()为get_the_post_thumbnail():因为前者直接输出内容,会打乱echo字符串的输出顺序,后者返回缩略图的HTML代码,适合拼接在echo里。
如果你想使用特定的标签(比如不是第一个),可以遍历$tags数组,根据标签的slug或名称来匹配对应的ID,比如:
foreach ($tags as $tag) { if ($tag->slug === 'your-target-tag-slug') { $tag_link = get_tag_link($tag->term_id); break; } }
这样就能精准获取你想要的标签链接啦。
内容的提问来源于stack exchange,提问作者Brandon Benefield
相关产品推荐
相关产品推荐

