如何自动化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:启用插件并测试
- 将代码保存为
auto-unprotect-ppwp-pages.php,上传到wp-content/plugins/目录 - 在WP后台启用该插件
- 手动调用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); })();
使用说明
- 安装Tampermonkey浏览器扩展
- 创建新脚本,粘贴代码并替换站点域名和页面ID
- 保持WP后台页面处于打开状态
注意事项
- 确认PPWP版本:不同版本函数名可能有差异,若
ppwp_unprotect_post不存在,可查看插件源码找对应函数 - 权限安全:后端REST端点必须设置强密钥,避免未授权访问
- 测试验证:首次使用建议修改定时时间为近期,确认功能正常
内容的提问来源于stack exchange,提问作者AlexTSF
相关产品推荐
相关产品推荐

