wordpress 自动为已发布文章生成长尾关键词标签代码版
- Linkreate AI插件 文章
- 2025-01-23 18:55:38
- 76热度
- 0评论
为了优化代码,避免对服务器造成过大的压力,我们可以对代码进行以下改进:
-
限制处理的文章数量:只处理最近发布的文章,而不是所有文章。
-
分批处理:将文章分批处理,每次只处理一小部分。
-
避免重复处理:为已经添加过长尾标签的文章设置标记,避免重复处理。
-
优化关键词提取和组合逻辑:减少不必要的循环和计算。
以下是优化后的代码:
function generate_seo_friendly_tags($post_id) {
// 获取文章标题和内容
$post = get_post($post_id);
if (!$post) return;
$title = $post->post_title;
$content = $post->post_content;
// 合并标题和内容作为文本基础
$text = $title . " " . $content;
// 使用正则表达式提取中文关键词
preg_match_all('/[x{4e00}-x{9fa5}]+/u', $text, $matches);
$keywords = array_unique($matches[0]); // 去重
// 过滤常见词(根据需要自定义)
$common_words = ['的', '和', '是', '在', '了', '我', '你', '他', '她', '它'];
$filtered_keywords = array_diff($keywords, $common_words);
// 生成长尾关键词(组合关键词)
$long_tail_keywords = [];
foreach ($filtered_keywords as $keyword) {
foreach ($filtered_keywords as $another_keyword) {
if ($keyword !== $another_keyword) {
$long_tail_keywords[] = $keyword . " " . $another_keyword;
}
}
}
// 合并关键词和长尾关键词
$tags = array_merge($filtered_keywords, $long_tail_keywords);
// 限制标签数量(避免过多标签)
$max_tags = 20;
$tags = array_slice($tags, 0, $max_tags);
// 将生成的标签添加到文章
wp_set_post_tags($post_id, $tags, false);
// 设置标记,避免重复处理
update_post_meta($post_id, 'seo_tags_generated', 'true');
}
// 钩子:在文章保存时执行
add_action('save_post', 'generate_seo_friendly_tags');
// 定时任务:为已发布的文章添加长尾标签
function schedule_seo_friendly_tags_generation() {
if (!wp_next_scheduled('generate_seo_friendly_tags_for_published_posts')) {
wp_schedule_event(time(), 'hourly', 'generate_seo_friendly_tags_for_published_posts');
}
}
add_action('wp', 'schedule_seo_friendly_tags_generation');
function generate_seo_friendly_tags_for_published_posts() {
// 获取已发布的文章
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => 10, // 每次处理10篇文章
'meta_query' => [
[
'key' => 'seo_tags_generated',
'compare' => 'NOT EXISTS'
]
]
];
$query = new WP_Query($args);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
$post_id = get_the_ID();
generate_seo_friendly_tags($post_id);
}
wp_reset_postdata();
}
}
add_action('generate_seo_friendly_tags_for_published_posts', 'generate_seo_friendly_tags_for_published_posts');
优化点说明:
-
分批处理:
-
使用
WP_Query
每次只查询10篇文章(通过posts_per_page
参数控制),避免一次性处理过多文章。 -
使用定时任务(
wp_schedule_event
)每小时运行一次,逐步处理所有文章。
-
-
避免重复处理:
-
使用
update_post_meta
为已处理的文章设置标记(seo_tags_generated
),避免重复处理。
-
-
优化关键词组合逻辑:
-
保留了原有的关键词提取和组合逻辑,但通过分批处理减少了单次处理的负担。
-
通过这些优化,代码在处理已发布文章时对服务器的压力会大大降低。
[自动更新内容]