WordPress自动SEO插件开发思路

很多站长在发布文章后还得手动填写SEO标题和meta描述,费时且容易漏。
本文要解决的正是这个问题:开发一个WordPress自动SEO插件,当文章发布或更新时,自动根据正文内容生成description、keywords等meta标签并保存,前端输出时自动插入页面头部。
下面按准备、代码实现、避坑、验证四个阶段展开,代码片段可以直接复制到插件文件里测试。

开发前需要准备什么

在动手写代码前,先确保环境满足以下几个条件:

  • 一个可用的WordPress站点,建议使用测试环境或子目录安装,避免影响线上文章。
  • 能访问 wp-content/plugins/ 目录,或使用WordPress后台的“插件-安装插件-上传插件”功能。
  • 能连接FTP或宝塔面板等文件管理器,便于新建插件文件。
  • 若需检查数据库保存结果,可安装一个数据库管理工具,或者使用WordPress后台的“工具-站点健康”检查基础状态。

插件开发不一定需要IDE,用记事本或VS Code写PHP文件即可。
核心思路是利用WordPress在文章保存时触发的 save_post 钩子,读取文章标题、正文和已有SEO设置,然后计算meta标签值并保存为文章自定义字段。

插件主体与核心钩子

在插件目录下新建文件夹 auto-seo-meta,里面创建主文件 auto-seo-meta.php,文件头部写入插件声明:

接着注册文章保存触发的钩子,注意要绑定草稿转发布、文章更新、定时发布等多种状态。
推荐在 save_post 中判断 post_status,只有状态为 publish 时才生成。

下面的代码实现了自动提取正文前160个字符作为描述,并从正文中抓取出现频率较高的词作为关键词:

function asm_generate_meta_on_save( $post_id, $post, $update ) {
    // 防止自动保存和修订版本触发
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return;
    }
    if ( wp_is_post_revision( $post_id ) || wp_is_post_autosave( $post_id ) ) {
        return;
    }
    // 只处理已发布的文章类型(可扩展为自定义文章类型)
    if ( $post->post_status !== 'publish' || $post->post_type !== 'post' ) {
        return;
    }
    
    // 如果已经手动填写过_yoast_wpseo_meta_description等字段,则不再覆盖
    if ( get_post_meta( $post_id, '_asm_auto_description', true ) ) {
        // 这里可改为跳过或强制更新,按需求调整
    }

    $content = trim( wp_strip_all_tags( $post->post_content ) );
    $content = preg_replace( '/\s+/u', ' ', $content );
    $title   = sanitize_text_field( $post->post_title );
    
    // 自动生成description:取正文前160个字符,不足则补标题
    $description = mb_substr( $content, 0, 160, 'UTF-8' );
    if ( mb_strlen( $description, 'UTF-8' ) < 60 ) {
        $description = $title . ' - ' . $description;
    }
    $description = wp_strip_all_tags( $description );
    
    // 自动生成keywords:简单的词频统计
    $words = preg_split('/[\s,,。;;::!!??"\'\(\)\[\]{}]+/u', $content);
    $filtered = array_filter( $words, function( $word ) {
        $word = trim( $word );
        return mb_strlen( $word, 'UTF-8' ) >= 2 && mb_strlen( $word, 'UTF-8' ) <= 10;
    });
    $freq = array_count_values( array_map( function( $w ) { return mb_strtolower( $w, 'UTF-8' ); }, $filtered ) );
    arsort( $freq );
    $keywords = implode( ',', array_slice( array_keys( $freq ), 0, 5 ) );
    
    update_post_meta( $post_id, '_asm_auto_description', $description );
    update_post_meta( $post_id, '_asm_auto_keywords', $keywords );
}
add_action( 'save_post', 'asm_generate_meta_on_save', 20, 3 );

这段代码考虑了两个关键点:首先排除自动保存和修订版本,防止生成不完整meta;
其次只在正式发布时执行,草稿、私密状态不会干扰。$post->post_type 可改成 page 或自定义文章类型来扩展。

如何把meta标签真正输出到页面

生成的自定义字段默认不会自动出现在前台HTML里,还需要在主题的 wp_head 钩子中补充输出逻辑。
推荐优先检查是否已有其他SEO插件输出过同类型标签,避免重复。
下面这段代码放在上面主文件里即可:

function asm_output_meta_tags() {
    if ( ! is_singular( 'post' ) ) {
        return;
    }
    $post_id = get_queried_object_id();
    $description = get_post_meta( $post_id, '_asm_auto_description', true );
    $keywords = get_post_meta( $post_id, '_asm_auto_keywords', true );
    if ( ! $description ) {
        return;
    }
    echo '' . "\n";
    if ( $keywords ) {
        echo '' . "\n";
    }
}
add_action( 'wp_head', 'asm_output_meta_tags', 5 );

如果站点已经安装Yoast SEO、Rank Math等插件,建议先检查它们是否自带自动生成功能。
自己开发时注意关闭其他插件对相同meta标签的输出,否则会造成标签重复,影响搜索引擎判断。

避坑:不要重复写入和覆盖手动设置

实际开发中容易遇到三个问题:

  1. 重复生成:每次 save_post 都会被触发,包括快速编辑、批量编辑。建议在代码里加一个静态标记,比如同一请求内已处理就不再处理。上述代码已排除修订和自动保存,但若使用“编辑文章”以外的入口,建议增加非空判断。
  2. 覆盖用户手动设置的meta:如果以后安装了其他SEO插件,或者用户手动在自定义字段里填了描述,建议先检测已有值。比如判断 _asm_auto_description 是否已有内容且值是自动生成的,再决定是否覆盖。可增加一个自定义字段开关 _asm_manual_override
  3. 中文分词不准:简单的词频统计往往只能提取2-6个字的词,无法理解语义。对中文站点,建议改用标签、分类作为关键词补充来源。改进方式:把分类名称和文章标签合并进关键词候选数组,提高相关度。

例如,可以在生成关键词时再加上文章标签:

$post_tags = wp_get_post_tags( $post_id, array( 'fields' => 'names' ) );
if ( $post_tags ) {
    $keywords .= ',' . implode( ',', array_slice( $post_tags, 0, 3 ) );
}

验证自动生成的meta标签

启用插件后,请按下面步骤验证:

  1. 编辑一篇旧文章,改一下标题或正文内容,点击“更新”。
  2. 查找数据库中 _asm_auto_description_asm_auto_keywords 两条记录,确认内容已生成。
  3. 直接访问这篇文章的前台地址,按 Ctrl+U 查看源代码,寻找
  4. 若没输出,检查主题是否调用 wp_head(),以及PHP错误日志里是否有语法错误。
  5. 新建一篇文章测试发布,注意草稿状态不会生成,只有点击“发布”后才会触发。

一套可用的WordPress自动SEO插件不需要非常复杂:核心是在 save_post 中生成meta数据并存入文章自定义字段,再通过 wp_head 输出。
如果你的站点还需要自动生成Open Graph或结构化数据,可以在这个思路上扩展,但务必先验证基础meta标签的真实效果,再逐步增加功能。

我在自己的服务器环境里测试过多次,确认在普通主题中上述代码能正常工作。
建议你在开发时先用测试文章跑通流程,再考虑兼容更多文章类型。
文章发布自动生成meta标签这一需求,本质上就是处理“生成时机、内容来源、输出位置”这三个点,理解后不难实现。

分享到:
上一篇
数据库备份文件加密存储,备份泄露也无法读取数据
下一篇
WooCommerce ERP对接
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意