按当前页面修改Post-Meta中的作者署名
问题描述
我正在使用报纸风格的WordPress主题和PublishPress Authors插件,这部分运行正常。✅
主题包含post-meta.php文件,该文件定义了页面上post-meta的显示方式。我想要根据当前页面类型修改post-meta中的作者块,调用PublishPress Authors的短代码:比如首页/前端页面用一种样式,单篇文章页面用另一种样式。
我试过多种方法,包括直接echo,但这导致PublishPress Authors的短代码显示在奇怪的重叠位置,覆盖了原有post-meta。
最初尝试的代码
$author_link = ''; if (is_home() || is_front_page()) { $author_link = $author_img . $label . (!is_home() || !is_front_page() ? get_the_author_posts_link() : do_shortcode('[publishpress_authors_box layout="ppma_boxes_1011" author_categories="author,co-author"]')); } elseif (is_single()) { $author_link = $author_img . $label . (!is_single() ? get_the_author_posts_link() : do_shortcode('[publishpress_authors_box layout="ppma_boxes_1567"]')); } else { $author_link = $author_img . $label . (!is_home() || !is_front_page() || !is_single() ? get_the_author_posts_link() : do_shortcode('[publishpress_authors_box layout="ppma_boxes_1011" author_categories="author,co-author"]')); } $output = sprintf( '<span class="%1$s">%2$s</span>', esc_attr(join(' ', $classes)), $author_link );
我加了第三个else分支处理分类归档等其他页面,但只有elseif (is_single())分支生效,首页和其他页面的逻辑都不起作用,单篇文章页面能正常显示预期效果,肯定是哪里漏了明显的问题。
更新记录
- 2024年8月1日 美国东部时间上午9:55:简化if语句,只区分页面和文章,首页/单篇文章页面效果符合预期,但分类归档页面的
$author_link完全为空。🤔
代码片段:$author_link = ''; if (is_page()) { $author_link = $author_img . $label . (!is_page() ? get_the_author_posts_link() : do_shortcode('[publishpress_authors_box layout="ppma_boxes_1011" author_categories="author,co-author"]')); } elseif (is_single()) { $author_link = $author_img . $label . (!is_single() ? get_the_author_posts_link() : do_shortcode('[publishpress_authors_box layout="ppma_boxes_1567"]')); } $output = sprintf( '<span class="%1$s">%2$s</span>', esc_attr(join(' ', $classes)), $author_link ); - 2024年8月1日 美国东部时间上午10:04:忽略上一次更新,清除缓存后显示仍不正确。😱
解决方案
你的问题核心是三元运算符逻辑冗余且错误,同时部分页面类型未被覆盖,导致$author_link为空。
1. 修正逻辑冗余问题
你在每个if分支里额外加的三元判断完全没必要——既然已经进入对应页面类型的分支,直接赋值目标内容即可,不需要再重复判断当前页面类型。
2. 覆盖所有页面类型
保留else分支处理归档、分类、搜索等未明确指定的页面,避免$author_link为空。
修正后的代码
$author_link = ''; // 首页/前端页面 if (is_home() || is_front_page()) { $author_link = $author_img . $label . do_shortcode('[publishpress_authors_box layout="ppma_boxes_1011" author_categories="author,co-author"]'); } // 单篇文章页面 elseif (is_single()) { $author_link = $author_img . $label . do_shortcode('[publishpress_authors_box layout="ppma_boxes_1567"]'); } // 其他页面(归档、分类、搜索等) else { // 可根据需求选择用短代码或默认作者链接 $author_link = $author_img . $label . get_the_author_posts_link(); // 若其他页面也想用短代码,替换为: // $author_link = $author_img . $label . do_shortcode('[publishpress_authors_box layout="ppma_boxes_1011" author_categories="author,co-author"]'); } $output = sprintf( '<span class="%1$s">%2$s</span>', esc_attr(join(' ', $classes)), $author_link );
额外注意事项
- 把代码里的
"替换为普通双引号",避免HTML实体解析问题。 - 若短代码输出导致样式重叠,可给短代码添加自定义类名(如
class="custom-author-box"),再通过主题CSS调整容器样式。 - 测试前务必清除WordPress缓存和浏览器缓存。
内容的提问来源于stack exchange,提问作者frostbyte
相关产品推荐
相关产品推荐

