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

IPS论坛4.7.17:如何通过Hook实现全话题页自定义meta description

合规解决IPS论坛多页话题meta description限制的方法

无需修改核心代码,利用IPS官方提供的钩子(Hook)系统,就能实现每一页话题都生成自定义的description和og:description标签,具体有两种可靠方案:

方案一:利用内容项显示钩子(content.item.display)

这个钩子会在任何内容项(包括论坛话题)页面渲染前触发,刚好在核心代码的meta标签逻辑之后执行,我们可以在这里强制覆盖或补充设置meta标签:

  1. 在你的插件中注册该钩子,回调逻辑示例:
$hooks = [
    'content.item.display' => function( $data ) {
        // 获取当前话题对象
        $item = $data['item'];
        // 获取当前页码,默认第一页
        $currentPage = \IPS\Request::i()->page ?? 1;

        // 自定义算法生成当前页的专属描述
        // 示例:结合话题标题、页码,提取当前页首帖的摘要
        $postsPerPage = \IPS\Settings::i()->posts_per_page;
        $firstPostOnPage = $item->posts()->slice( ($currentPage - 1) * $postsPerPage, 1 )->first();
        $customDesc = "{$item->title} - 第{$currentPage}页:" . \IPS\Text::truncate( strip_tags( $firstPostOnPage->content ), 160 );

        // 强制设置meta标签
        \IPS\Output::i()->metaTags['description'] = $customDesc;
        \IPS\Output::i()->metaTags['og:description'] = $customDesc;
    }
];

方案二:利用metaTags过滤钩子(core.output.metaTags)

这个钩子会在页面meta标签最终输出前触发,允许我们直接修改metaTags数组,适用性更广:

  1. 注册钩子并编写回调:
$hooks = [
    'core.output.metaTags' => function( $metaTags ) {
        // 仅针对论坛话题页面生效
        $dispatcher = \IPS\Dispatcher::i();
        if ( $dispatcher->application->directory === 'forums' && $dispatcher->controller === 'topic' ) {
            $item = $dispatcher->controller->item;
            if ( $item instanceof \IPS\forums\Topic ) {
                $currentPage = \IPS\Request::i()->page ?? 1;
                
                // 自定义生成描述逻辑(可按需调整)
                $postsPerPage = \IPS\Settings::i()->posts_per_page;
                $firstPostOnPage = $item->posts()->slice( ($currentPage - 1) * $postsPerPage, 1 )->first();
                $customDesc = "{$item->title} - 第{$currentPage}页:" . \IPS\Text::truncate( strip_tags( $firstPostOnPage->content ), 160 );

                // 更新meta标签数组
                $metaTags['description'] = $customDesc;
                $metaTags['og:description'] = $customDesc;
            }
        }
        return $metaTags;
    }
];

关键注意事项

  • 自定义描述算法要保证每页内容唯一,避免核心代码注释中提到的重复标签问题;
  • 两种方案都基于IPS官方钩子系统,属于合规扩展,论坛版本升级时不会被核心代码覆盖;
  • 如果仅需要针对论坛话题生效,方案一中也可以替换为forums.topic.display钩子,参数逻辑一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 12:12:27