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

WordPress Cron调用Google Site Kit获取GSC数据时缺失必要权限

问题分析

你遇到的核心问题是WordPress定时任务(Cron)无用户上下文,导致Google Site Kit无法验证权限:

  • 直接调用代码时,是在登录用户的会话中执行,Site Kit能读取该用户的授权信息,权限校验自然通过;
  • Cron任务是后台静默执行的,没有关联任何登录用户,Site Kit找不到有效授权,因此返回missing_required_scopes错误。

另外你的代码还存在钩子名称不匹配的bug:wp_next_scheduled检查的是gsc_data_send_email_event_'.$interval,但wp_schedule_single_event调度的是gsc_data_send_email_event,这会导致重复创建定时任务。

解决方案

1. 修复Cron钩子名称不匹配

把调度和检查的钩子名称统一,避免重复调度:

public function gsc_data_schedule_email( $interval ) {
    $hook_name = 'gsc_data_send_email_event_' . $interval;
    if ( ! wp_next_scheduled( $hook_name ) ) {
        wp_schedule_single_event( time() + $interval, $hook_name, array( $interval ) );
    }
}

清理钩子时也要用统一的名称:

wp_clear_scheduled_hook( 'gsc_data_send_email_event_' . $interval );

2. 在Cron任务中模拟授权用户上下文

在获取GSC数据前,切换到拥有Google Site Kit完整权限的管理员用户,让Site Kit能读取该用户的授权信息:
修改gsc_data_send_email_function函数,添加用户切换逻辑:

public function gsc_data_send_email_function( $interval ) {
    global $wpdb;

    // 保存原用户ID(Cron中通常为0,即未登录状态)
    $original_user_id = get_current_user_id();

    // 切换到拥有Site Kit权限的管理员用户(替换为你的管理员ID,通常是1)
    $admin_user = get_user_by( 'id', 1 );
    if ( $admin_user ) {
        wp_set_current_user( $admin_user->ID );
    }

    if ( ! class_exists( 'Google\Site_Kit\Plugin' ) ) {
        // 恢复原用户后退出
        wp_set_current_user( $original_user_id );
        return;
    }

    // ... 原有获取GSC数据的代码 ...

    // 执行完所有操作后恢复原用户
    wp_set_current_user( $original_user_id );
}

3. 验证权限配置

确保你切换的管理员账号确实完成了Google Site Kit的完整授权:

  • 登录该管理员账号,进入Site Kit设置页面;
  • 检查Search Console模块的权限状态,确认已授予https://www.googleapis.com/auth/webmasters权限。
修改后关键代码示例
public function gsc_data_schedule_email( $interval ) {
    $hook_name = 'gsc_data_send_email_event_' . $interval;
    if ( ! wp_next_scheduled( $hook_name ) ) {
        wp_schedule_single_event( time() + $interval, $hook_name, array( $interval ) );
    }
}

public function gsc_data_send_email_function( $interval ) {
    global $wpdb;

    $original_user_id = get_current_user_id();
    $admin_user = get_user_by( 'id', 1 );
    if ( $admin_user ) {
        wp_set_current_user( $admin_user->ID );
    }

    if ( ! class_exists( 'Google\Site_Kit\Plugin' ) ) {
        wp_set_current_user( $original_user_id );
        return;
    }

    $site_kit       = \Google\Site_Kit\Plugin::instance();
    $context        = $site_kit->context();
    $modules        = new \Google\Site_Kit\Core\Modules\Modules( $context );
    $search_console = $modules->get_module( 'search-console' );

    if ( ! $search_console ) {
        wp_set_current_user( $original_user_id );
        return;
    }

    // ... 后续原有代码 ...

    // 恢复原用户
    wp_set_current_user( $original_user_id );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 19:54:50