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

如何自动化WordPress页面密码解除保护功能?

自动化解除WordPress页面PPWP密码保护方案

方案一:后端PHP定时触发(推荐,最可靠)

该方法直接调用Password Protect WordPress(PPWP)插件的内置函数,不依赖前端界面,完全适配无人值守场景。

步骤1:编写自定义插件代码

推荐用自定义插件实现,避免主题更新丢失代码:

<?php
/**
 * Plugin Name: Auto Unprotect PPWP Pages
 * Description: 定时解除指定页面的PPWP密码保护(美国东部时间周六12点)
 */

// 插件激活时注册定时任务
register_activation_hook(__FILE__, 'auppwp_schedule_unprotect');
function auppwp_schedule_unprotect() {
    if (!wp_next_scheduled('auppwp_unprotect_pages_hook')) {
        // 转换EST为UTC:EST是UTC-5,周六12点EST = 周六17点UTC
        wp_schedule_event(strtotime('Saturday 17:00 UTC'), 'weekly', 'auppwp_unprotect_pages_hook');
    }
}

// 插件停用时取消定时任务
register_deactivation_hook(__FILE__, 'auppwp_unschedule_unprotect');
function auppwp_unschedule_unprotect() {
    $timestamp = wp_next_scheduled('auppwp_unprotect_pages_hook');
    wp_unschedule_event($timestamp, 'auppwp_unprotect_pages_hook');
}

// 核心解除保护逻辑
add_action('auppwp_unprotect_pages_hook', 'auppwp_do_unprotect');
function auppwp_do_unprotect() {
    // 替换为你的目标页面ID数组
    $target_page_ids = [10, 11, 12, 13, 14];
    
    foreach ($target_page_ids as $page_id) {
        // 先检查页面是否处于保护状态
        if (function_exists('ppwp_is_post_protected') && ppwp_is_post_protected($page_id)) {
            // 调用PPWP的解除保护函数
            ppwp_unprotect_post($page_id);
            // 可选:记录操作日志到服务器错误日志
            error_log("[Auto Unprotect] 已解除页面ID {$page_id} 的密码保护");
        }
    }
}

// 可选:添加REST端点,用于服务器Cron触发(比WP内置定时更可靠)
add_action('rest_api_init', function () {
    register_rest_route('auppwp/v1', '/unprotect', [
        'methods' => 'GET',
        'callback' => 'auppwp_do_unprotect',
        'permission_callback' => function () {
            // 设置强密钥防止未授权访问
            return isset($_GET['secret']) && $_GET['secret'] === 'your_random_secure_secret_key';
        }
    ]);
});

步骤2:启用插件并测试

  1. 将代码保存为auto-unprotect-ppwp-pages.php,上传到wp-content/plugins/目录
  2. 在WP后台启用该插件
  3. 手动调用REST端点测试:https://你的站点域名/wp-json/auppwp/v1/unprotect?secret=your_random_secure_secret_key

步骤3:服务器Cron增强可靠性(可选)

WP内置定时依赖站点访问触发,若周末访问量低可能延迟。建议用服务器Cron直接触发:

  • 通过cPanel或crontab -e编辑Cron任务
  • 添加规则(每周六UTC17点执行,对应EST12点):
0 17 * * 6 curl "https://你的站点域名/wp-json/auppwp/v1/unprotect?secret=your_random_secure_secret_key"

方案二:前端脚本定时触发(适合快速测试)

无需修改后端,用Tampermonkey脚本在浏览器定时点击按钮,注意:需保持浏览器打开且WP后台登录状态有效。

Tampermonkey脚本代码

// ==UserScript==
// @name         自动解除PPWP页面保护
// @namespace    tampermonkey-auto-unprotect
// @version      0.1
// @description  每周六美国东部时间12点自动点击PPWP解除保护按钮
// @match        *://你的站点域名/wp-admin/edit.php?post_type=page
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // 检查是否为目标时间(EST周六12点)
    function isTargetTime() {
        const now = new Date();
        // 转换为EST时区(UTC-5,需夏令时支持可替换为Intl.DateTimeFormat)
        const estTime = new Date(now.getTime() - 5 * 60 * 60 * 1000);
        return estTime.getDay() === 6 && estTime.getHours() === 12 && estTime.getMinutes() === 0;
    }

    // 触发解除保护操作
    function triggerUnprotect() {
        const targetIds = [10, 11, 12, 13, 14];
        
        targetIds.forEach(id => {
            // 定位解除保护按钮(根据title判断)
            const button = document.querySelector(`#ppw-protect-post_${id}[title="Unprotect this page"]`);
            if (button) {
                button.click();
                console.log(`已解除页面ID ${id} 的保护`);
            }
        });
    }

    // 每分钟检查一次时间
    const checkInterval = setInterval(() => {
        if (isTargetTime()) {
            triggerUnprotect();
            clearInterval(checkInterval);
        }
    }, 60000);
})();

使用说明

  1. 安装Tampermonkey浏览器扩展
  2. 创建新脚本,粘贴代码并替换站点域名和页面ID
  3. 保持WP后台页面处于打开状态

注意事项

  • 确认PPWP版本:不同版本函数名可能有差异,若ppwp_unprotect_post不存在,可查看插件源码找对应函数
  • 权限安全:后端REST端点必须设置强密钥,避免未授权访问
  • 测试验证:首次使用建议修改定时时间为近期,确认功能正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 22:13:10