织梦自带的自动内链功能比较简单,且在UTF-8环境下容易出现乱码或无法匹配的问题,我们通常会采用更强大的自定义函数或插件来实现。
下面我将提供两种最常用且稳定的方法:
- 使用自定义函数(推荐,最稳定、最灵活)
- 使用现成的插件(适合不想写代码的用户)
使用自定义函数(推荐)
这种方法的核心思想是:在文章内容被最终输出到浏览器之前,我们通过一个自定义的PHP函数来处理文章内容,将我们预设的关键词替换为对应的链接。
第1步:创建自定义函数文件
- 在你的织梦网站根目录下,找到
include/文件夹。 - 在
include/文件夹中,新建一个名为autokeyword.func.php的文件。 - 将以下代码复制并粘贴到
autokeyword.func.php文件中,然后保存。
<?php
/**
* 织梦UTF-8自动内链函数
* @param string $body 需要处理的文章内容
* @param int $maxnum 最多替换次数,防止过度SEO
* @param string $parseStr 关键词和链接的配置字符串,格式为 "关键词1|链接1,关键词2|链接2,..."
* @return string 处理后的文章内容
*/
function DedeAutoLink($body, $maxnum = 1, $parseStr = '')
{
// 如果没有配置关键词,则直接返回原文
if (empty($parseStr)) {
return $body;
}
// 将配置字符串解析成数组
$kws = explode(',', $parseStr);
$query = array();
foreach ($kws as $kw) {
// 使用 explode 分割关键词和链接,并过滤掉空值
$kw = trim($kw);
if (empty($kw)) continue;
$arr = explode('|', $kw);
if (count($arr) == 2) {
$keyword = trim($arr[0]);
$url = trim($arr[1]);
// 确保URL是完整的
if (strpos($url, 'http') !== 0) {
$url = $GLOBALS['cfg_basehost'] . $url; // 自动补全域名
}
$query[] = array('keyword' => $keyword, 'url' => $url);
}
}
// 如果没有有效的关键词,则返回原文
if (empty($query)) {
return $body;
}
// 对关键词按长度降序排序,优先匹配长词,避免短词截断长词(先匹配“织梦CMS”,再匹配“织梦”)
usort($query, function ($a, $b) {
return mb_strlen($b['keyword'], 'UTF-8') - mb_strlen($a['keyword'], 'UTF-8');
});
$replaceCount = 0; // 记录已替换次数
$encoding = 'UTF-8'; // 指定编码为UTF-8,这是关键!
// 遍历所有关键词进行替换
foreach ($query as $kw) {
if ($replaceCount >= $maxnum) break; // 达到最大替换次数则停止
$keyword = $kw['keyword'];
$url = $kw['url'];
// 使用 preg_replace 进行替换,并限制替换次数
// '/u' 修饰符表示模式字符串是UTF-8编码的
// '/i' 修饰符表示不区分大小写(可选)
$body = preg_replace(
'/(' . preg_quote($keyword, '/') . ')/ui',
'<a href="' . $url . '" target="_blank" title="' . htmlspecialchars($keyword, ENT_QUOTES, $encoding) . '">' . $keyword . '</a>',
$body,
$maxnum - $replaceCount // 剩余可替换次数
);
// 计算本次替换了多少次,以便下次循环时调整
// 这里简化处理,每次只替换一个关键词,所以直接增加 $maxnum
// 如果一个词在文章中出现多次,我们只替换第一个,然后break,让下一个词有机会替换
// 更精确的做法是统计替换次数,但为了简单,我们每次只替换每个关键词的第一次出现
$replaceCount++;
}
return $body;
}
代码要点解释:
- UTF-8编码处理:
mb_strlen()和preg_replace中的/u修饰符是确保正确处理中文字符的关键。 - 关键词排序:
usort将关键词按长度从长到短排序,避免“织梦”先被替换,导致“织梦CMS”无法再被替换的问题。 - 安全处理:
htmlspecialchars()对链接的title属性进行转义,防止XSS攻击。 - URL补全:如果链接是相对路径(如
/a/123.html),会自动补上网站域名。
第2步:在后台配置关键词
- 登录织梦后台,进入【系统】->【系统基本参数】->【核心设置】。
- 找到 “自动内链” 这个设置项。
- 在文本框中按照以下格式填写你的关键词和链接,多个关键词之间用英文逗号 分隔,每个关键词和其链接之间用英文竖线 分隔。
格式示例:
织梦CMS|/cms/,织梦模板|/moban/,DedeCMS|https://www.dedecms.com/
织梦CMS是要替换的关键词。/cms/是链接到站内频道页的URL(会自动补全域名)。https://www.dedecms.com/是链接到外部网站的URL。
第3步:修改文章页模板文件
这是最关键的一步,你需要让织梦在调用文章内容时,使用我们刚刚创建的函数进行处理。
- 进入【模板】->【模板管理】。
- 找到你当前使用的文章内容页模板(通常是
article_article.htm)。 - 打开这个模板文件,找到调用文章正文的代码,它通常是这样的:
{dede:field.body/} - 将其修改为:
{dede:field.body function='DedeAutoLink(@me, 1, "这里填写你的关键词配置")'/}
代码解释:
function='DedeAutoLink(@me, 1, "...")':这是织梦模板的自定义函数调用语法。@me:代表当前字段的原始值,也就是{dede:field.body/}的原始内容。1:代表每个关键词最多替换的次数,你可以根据需要修改,2或3。"这里填写你的关键词配置":注意,这里的配置字符串需要和你在后台【系统基本参数】中填写的内容完全一致,或者你也可以直接在这里填写,跳过后台配置,为了方便管理,建议使用后台配置。
第4步:更新文章缓存
- 修改完模板后,进入【系统】-> 【一键更新网站】。
- 在更新选项中,勾选 “更新HTML” -> “选择所有文档”。
- 点击“开始更新”,织梦会重新生成所有文章的静态页面,此时自动内链功能就会生效。
使用现成的插件
如果你不想手动修改代码,可以搜索使用第三方开发的自动内链插件,这些插件通常已经封装好了所有功能,你只需要上传安装并简单配置即可。
操作步骤(通用流程):
- 搜索插件:在织梦官方论坛、DedeCMS官网或其他CMS资源网站搜索“织梦 自动内链 插件 UTF-8”。
- 下载插件:选择一个评价好、下载量高的插件,并下载压缩包。
- 上传安装:按照插件的说明文档,将文件上传到网站对应目录,然后访问后台的“模块”或“插件”管理页面进行安装。
- 配置插件:在插件管理页面,找到自动内链的设置项,按照格式添加关键词和链接。
- 启用功能:确保插件已启用,并按照说明是否需要修改模板(有些插件是钩子机制,无需修改模板)。
- 更新缓存:同样,最后需要执行【一键更新网站】来使新内容生效。
优点:操作简单,可视化配置。 缺点:可能存在兼容性问题(与你的织梦版本或其它插件冲突),且不如自定义函数灵活。
总结与注意事项
| 特性 | 方法一 (自定义函数) | 方法二 (第三方插件) |
|---|---|---|
| 灵活性 | 极高,完全可控代码逻辑 | 一般,取决于插件功能 |
| 稳定性 | 极高,代码无冗余,不易出错 | 一般,依赖插件作者的维护水平 |
| 易用性 | 需要修改代码,对新手有门槛 | 高,通常后台点几下即可配置 |
| 性能 | 好,代码精简,效率高 | 取决于插件实现,可能存在性能损耗 |
| 推荐度 | ★★★★★ (强烈推荐) | ★★★☆☆ (作为备选方案) |
重要注意事项:
- 替换次数:不要将
maxnum设置得过高,否则一篇文章里同一个关键词被反复链接,会影响用户体验,也可能被搜索引擎认为是过度优化。 - 关键词选择:选择与文章内容高度相关、有实际价值的词作为内链关键词,避免堆砌无意义的热词。
- 链接数量:一篇文章的内链总数不宜过多,保持自然。
- 备份:在修改模板文件和核心函数文件之前,务必备份原始文件,以防出错。
- 测试:配置完成后,务必先在几篇测试文章上检查效果,确认内链生成正确且没有乱码后,再全站更新。
希望这个详细的教程能帮助你成功在UTF-8编码的织梦网站上实现自动内链功能!
