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

WordPress Twenty Twenty-Two主题:如何在查询循环中仅展示帖子Speaker内容?

解决方案

方案1:使用WordPress原生自定义字段(无需插件)

这是最轻量化的方案,直接利用WordPress自带功能单独存储Speaker信息,避免从帖子内容里提取的麻烦:

  1. 编辑议程帖子时,点击右上角「选项」→「偏好设置」,勾选「面板」里的「自定义字段」,开启自定义字段面板。
  2. 在帖子编辑页的「自定义字段」区域,添加新字段:
    • 键(Key):agenda_speakers(命名保持统一即可)
    • 值(Value):每行输入一个Speaker,比如:
      Somebody
      Somebody
      Somebody
      
  3. 在查询循环里,替换原「帖子内容」块,添加「自定义字段」块,选择你创建的agenda_speakers键,即可用列表格式展示。如果需要更灵活的格式,可插入「代码」块用PHP输出:
    <?php
    $speakers = get_post_meta(get_the_ID(), 'agenda_speakers', true);
    if ($speakers) {
        $speaker_list = explode("\n", trim($speakers));
        echo '<ul>';
        foreach ($speaker_list as $speaker) {
            echo '<li>Speaker: ' . esc_html($speaker) . '</li>';
        }
        echo '</ul>';
    }
    ?>
    

方案2:用ACF插件创建重复字段(适合复杂议程)

如果议程经常有多个Speaker,且需要更友好的编辑体验,推荐用Advanced Custom Fields(ACF)的「重复字段」功能:

  1. 安装并激活ACF插件,后台进入「自定义字段」→「添加字段组」:
    • 字段组名称:「议程信息」
    • 规则:设置为「显示在帖子→分类等于A」(只在分类A的帖子里显示)
    • 添加「重复字段」,字段名称设为「Speakers」,子字段选「文本」,标签设为「Speaker姓名」。
  2. 编辑分类A的帖子时,就能看到可重复添加的Speaker输入框,逐个填写即可。
  3. 在查询循环里用「代码」块输出:
    <?php
    if (have_rows('speakers')) {
        echo '<ul>';
        while (have_rows('speakers')) {
            the_row();
            echo '<li>Speaker: ' . esc_html(get_sub_field('speaker_name')) . '</li>';
        }
        echo '</ul>';
    }
    ?>
    

方案3:过滤现有帖子内容(不修改现有数据)

如果不想改动现有帖子的编辑方式,只想在前端过滤出Speaker的li标签,可在主题的functions.php文件里添加过滤函数:

function filter_agenda_speakers($content) {
    // 仅在分类A的帖子查询循环中生效
    if (is_page() && has_term('分类A', 'category', get_the_ID())) {
        $dom = new DOMDocument();
        // 处理HTML编码问题
        @$dom->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'));
        $lis = $dom->getElementsByTagName('li');
        $speaker_html = '<ul>';
        foreach ($lis as $li) {
            $text = $li->nodeValue;
            if (strpos($text, 'Speaker:') !== false) {
                $speaker_html .= $dom->saveHTML($li);
            }
        }
        $speaker_html .= '</ul>';
        return $speaker_html;
    }
    return $content;
}
add_filter('the_content', 'filter_agenda_speakers');

添加后,查询循环里的「帖子内容」块就只会显示包含Speaker的条目了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:23:01