You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按当前页面修改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())分支生效,首页和其他页面的逻辑都不起作用,单篇文章页面能正常显示预期效果,肯定是哪里漏了明显的问题。

更新记录

  1. 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
    );
    
  2. 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
);

额外注意事项

  • 把代码里的&quot;替换为普通双引号",避免HTML实体解析问题。
  • 若短代码输出导致样式重叠,可给短代码添加自定义类名(如class="custom-author-box"),再通过主题CSS调整容器样式。
  • 测试前务必清除WordPress缓存和浏览器缓存。

内容的提问来源于stack exchange,提问作者frostbyte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 09:58:11