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

如何拆分WordPress归档描述,实现内容分区域展示?

拆分WordPress归档描述的两种实用方案

当然有办法啦!针对你提到的归档描述拆分需求,我准备了两种方案,分别对应按<!-- more -->标签拆分和按第一段拆分的场景,具体实现如下:

一、按<!-- more -->标签拆分内容

首先要注意,the_archive_description()是直接输出内容的,我们需要先获取原始内容再拆分。这里用get_the_archive_description()来获取归档描述的原始文本,然后判断并拆分:

<?php
// 获取归档描述的原始内容
$archive_desc = get_the_archive_description();

// 检查内容里是否存在<!-- more -->标签
if (strpos($archive_desc, '<!-- more -->') !== false) {
    // 拆分内容为两部分(只拆第一次出现的标签)
    list($desc_first_part, $desc_second_part) = explode('<!-- more -->', $archive_desc, 2);
    
    // 输出第一部分,用wpautop保持默认段落格式
    echo '<div class="taxonomy-description-first">' . wpautop($desc_first_part) . '</div>';
    
    // 输出第二部分,可放在页面其他位置
    echo '<div class="taxonomy-description-second">' . wpautop($desc_second_part) . '</div>';
} else {
    // 如果没有more标签, fallback到原有输出逻辑
    the_archive_description( '<div class="taxonomy-description">', '</div>' );
}
?>

小提示:wpautop()函数会自动给内容添加<p>标签,和the_archive_description()的默认行为一致,能保证格式不会乱。

二、按第一段自动拆分内容

如果不需要手动加<!-- more -->标签,想自动按第一段拆分,可以用两种方式实现:

方法1:DOM解析(更可靠,兼容复杂HTML)

<?php
$archive_desc = get_the_archive_description();
// 先让内容生成默认的段落格式
$formatted_desc = wpautop($archive_desc);

// 用DOMDocument解析HTML
$dom = new DOMDocument();
// 处理编码问题,避免解析报错
@$dom->loadHTML('<?xml encoding="UTF-8">' . $formatted_desc);
// 获取所有<p>标签
$paragraphs = $dom->getElementsByTagName('p');

if ($paragraphs->length > 0) {
    // 提取第一段内容
    $first_paragraph = $dom->saveHTML($paragraphs->item(0));
    // 去掉第一段,得到剩余内容
    $remaining_content = str_replace($first_paragraph, '', $formatted_desc);
    
    // 输出第一段
    echo '<div class="taxonomy-description-first-paragraph">' . $first_paragraph . '</div>';
    
    // 如果剩余内容不为空,再输出
    if (!empty(trim($remaining_content))) {
        echo '<div class="taxonomy-description-remaining">' . $remaining_content . '</div>';
    }
} else {
    // 没有段落标签时,输出完整内容
    the_archive_description( '<div class="taxonomy-description">', '</div>' );
}
?>

方法2:正则表达式(更简洁,适合简单内容)

<?php
$archive_desc = get_the_archive_description();
$formatted_desc = wpautop($archive_desc);

// 匹配第一个<p>标签及其内容
if (preg_match('/^<p>(.*?)<\/p>(.*)$/s', $formatted_desc, $matches)) {
    $first_paragraph = '<p>' . $matches[1] . '</p>';
    $remaining_content = $matches[2];
    
    echo '<div class="taxonomy-description-first-paragraph">' . $first_paragraph . '</div>';
    
    if (!empty(trim($remaining_content))) {
        echo '<div class="taxonomy-description-remaining">' . $remaining_content . '</div>';
    }
} else {
    the_archive_description( '<div class="taxonomy-description">', '</div>' );
}
?>

注意事项

  • 始终用get_the_archive_description()获取原始内容,而不是直接修改the_archive_description(),这样能保留WordPress默认的内容过滤逻辑。
  • 两种方案可以按需选择:按<!-- more -->拆分更灵活,用户能手动控制拆分点;按第一段拆分则是自动处理,适合不需要人工干预的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:38:00