如何在WordPress循环内通过短码获取并输出带链接的文章作者显示名
如何在WordPress循环内通过短码获取并输出带链接的文章作者显示名
嘿,我看你在WordPress区块主题的搜索结果循环里,想用短码输出带链接的作者信息时遇到了问题,咱们来把这个问题搞定~
先说说你原来代码里的核心问题:
- 第一个函数里,
get_the_author()返回的是作者的显示名字符串,但get_the_author_meta()的第二个参数需要的是用户ID(数字类型),传字符串肯定会出问题,导致获取的作者信息不对或者为空。 - 直接调用不带参数的
get_the_author_meta()虽然在循环里理论上能生效,但用更明确的方式获取当前文章的作者ID会更可靠,避免依赖全局变量可能出现的意外。
这里给你调整后的短码函数,不仅能解决问题,还兼顾了安全性和兼容性:
function auteur_par(){ // 获取当前循环中文章的作者ID,这是最可靠的方式 $author_id = get_post_field('post_author'); // 通过作者ID获取显示名 $author_name = get_the_author_meta('display_name', $author_id); // 获取作者的归档页面链接(WordPress默认就有,比用户填写的个人主页更稳定) $author_url = get_author_posts_url($author_id); // 如果你一定要用用户自己填写的个人主页,可以用下面这段替换上面的$author_url // $author_url = get_the_author_meta('user_url', $author_id); // // 如果用户没填个人主页, fallback到作者归档页 // if (empty($author_url)) { // $author_url = get_author_posts_url($author_id); // } // 确保作者信息存在再输出,同时做安全转义避免漏洞 if ($author_name && $author_url) { return '<p>Par <a href="' . esc_url($author_url) . '" target="_self" class="wp-block-post-author-name__link">' . esc_html($author_name) . '</a></p>'; } // 没有作者信息时返回空,避免输出无效内容 return ''; } add_shortcode('auteur_par', 'auteur_par');
几点重要说明:
get_post_field('post_author')能精准获取当前循环内文章的作者ID,不管是搜索结果循环还是普通文章循环都适用。- 用
get_author_posts_url()获取作者归档页链接是更稳妥的选择,因为很多用户可能不会填写个人主页地址,而归档页是WordPress自带的,用户点进去能看到该作者的所有文章。如果你坚持要用用户填写的个人主页,可以用代码里注释的部分。 - 加上
esc_url()和esc_html()是WordPress开发的安全规范,能防止恶意代码注入,一定要养成这个习惯哦。 - 增加了判断逻辑,只有当作者名和链接都存在时才输出内容,避免出现空的链接或者奇怪的文本。
之后你在搜索结果模板的主循环里(也就是while( have_posts() ) : the_post();和endwhile;之间的区域)调用[auteur_par]短码,就能正确输出带链接的作者显示名啦~
备注:内容来源于stack exchange,提问作者user28551593
相关产品推荐
相关产品推荐

