dedecms织梦修改{dede:field.body/}给文章自动增加关键词内链

第一步,修改article_article.htm中的{dede:field.body/}为{dede:field.body function='body_url(@me)'/}
第二部,修改INC/extend.func.php新增函数body_url代码如下:

function body_url($text) {

$datelist = file_get_contents(__DIR__ . '/testlist.json');

// 将 JSON 字符串解码为 PHP 数组

$datelist = json_decode($datelist, true);

if (json_last_error() !== JSON_ERROR_NONE) {

throw new Exception("Invalid JSON string provided.");

}

// 创建一个关联数组来存储替换映射

$replacementMap = [];

foreach ($datelist as $item) {

if (isset($item['text']) && isset($item['textlist'])) {

$replacementMap[$item['text']] = $item['textlist'];

}

}

// 使用一个数组来跟踪每个词的替换次数

$replacementCounts = array_fill_keys(array_keys($replacementMap), 0);

// 全局替换计数器,确保总替换次数不超过两次

$globalReplacementCount = 0;

// 分割文本,捕获要替换的词和它们之间的文本

$segments = preg_split('/(' . implode('|', array_map('preg_quote', array_keys($replacementMap))) . ')/', $text, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

$result = '';

$i = 0;

while ($i < count($segments)) {

$segment = $segments[$i];

if (isset($replacementMap[$segment]) && $replacementCounts[$segment] < 1 && $globalReplacementCount < 2) {

// 执行替换

$replacedSegment = $replacementMap[$segment];

// 更新替换次数

if (!isset($replacementCounts[$segment])) {

$replacementCounts[$segment] = 0;

}

$replacementCounts[$segment]++;

$globalReplacementCount++;

// 将替换后的词添加到结果中

$result .= $replacedSegment;

} else {

// 如果不符合替换条件,直接添加原词到结果中

$result .= $segment;

}

$i++;

}

return $result;

}

这里的$datelist = file_get_contents('testlist');  会读取本地路面下的testlist文件,testlist文件格式如下:

[

{

"text": "关键词1",

"textlist": "<a href=\"关键词1链接\">关键词1</a>"

},

{

"text": "关键词2",

"textlist": "<a href=\"//关键词2链接\">关键词2</a>"

}]

多的关键词自己新增即可。然后生成文档

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注