### [批量修改文章下载权限](https://www.bber.cn/article/1782)
**Published:** 2025-12-26T20:30:41
**Author:** 哔哔一二
**Excerpt:** 此代码仅可以对文章ID范围进行修改,例如文章id:1-100 的范围,无法对指定分类进行修改。其实比较鸡肋,但对于一段时间一直写同一种类型文章的批量权限有点帮助。 但这是春哥给别人写的,我觉得比较保险。 我尝试了将此代码修改为分类下的文章修
此代码仅可以对文章ID范围进行修改,例如文章id:1-100 的范围,无法对指定分类进行修改。其实比较鸡肋,但对于一段时间一直写同一种类型文章的批量权限有点帮助。
但这是春哥给别人写的,我觉得比较保险。
我尝试了将此代码修改为分类下的文章修改,放在文章末尾
#### 使用方法:
- 设置好你要修改的文章id范围,然后设置你要修改的权限,只能单独一个权限
- 将此代码放到子主题,page目录下创建一个php文件将代码放进去,打开浏览器访问这个php文件即可。
- 访问地址示例:www.xxxx.cn/wp-content/themes/b2child/Pages/aaa.php
'post',//文章形式是post
'post\_status'=>'publish',//文章状态是已发布
'posts\_per\_page'=>-1//所有文章,如果文章数量过多(几万篇),可能速度很慢
);
$the\_query = new WP\_Query($arg);
if ( $the\_query->have\_posts() ) {
while ( $the\_query->have\_posts() ) {
$the\_query->the\_post();
$id = get\_the\_id();
$res = false;
//要设置的文章ID范围
if($id >=1184 && $id <= 1349){
$downs = get\_post\_meta($id,'b2\_single\_post\_download\_group',true);
if(!empty($downs)){
$save = false;
foreach ($downs as $k => $v) {
if(isset($downs\[$k\]\['rights'\])){
$downs\[$k\]\['rights'\] = 'all|free';
$save = true;
}
}unset($v);
if($save){
update\_post\_meta($id,'b2\_single\_post\_download\_group',$downs);
}
}
}
}
echo '完成';
wp\_reset\_postdata();
} else {
echo '没有文章';
}
// 结束执行
exit;
?>
### 通过分类ID批量修改指定分类下的文章下载权限|使用方法同上
在你拿走这个功能时,我想告诉你一点我的想法:
1、在你用此代码之前,我希望你一定要备份好自己的网站数据库后,再进行修改
2、我希望熬的这3个小时成果有帮到你,如果你用了有问题可以好好交流,不要恶言相向。
3、代码我测试了没问题,但我无法对你的数据进行保障,如果你没有任何代码基础,也对我并不放心,希望你停止使用
\[content\_hide\]
⚠️ 安全验证失败!请刷新页面重试。';
} else {
// 接收并过滤输入
$target\_category\_id = intval($\_POST\['category\_id'\]);
$rights\_text = sanitize\_textarea\_field($\_POST\['rights\_value'\]);
// 基础验证
if ($target\_category\_id <= 0) {
$submit\_result = '
⚠️ 分类ID必须是大于0的数字!
';
} elseif (empty(trim($rights\_text))) {
$submit\_result = '⚠️ 权限值不能为空!
';
} else {
// 处理多行文本为带\\r\\n的字符串(匹配数据库格式)
$rights\_lines = preg\_split('/\\r\\n|\\r|\\n/', $rights\_text);
$valid\_lines = \[\];
foreach ($rights\_lines as $line) {
$line = trim($line);
if (!empty($line)) {
$valid\_lines\[\] = $line;
}
}
$target\_rights = implode("\\r\\n", $valid\_lines);
// 执行批量修改
$arg = array(
'post\_type' => 'post',
'post\_status' => 'publish',
'posts\_per\_page' => -1,
'no\_found\_rows' => true,
'cat' => $target\_category\_id,
'fields' => 'ids',
);
$post\_ids = get\_posts($arg);
$total\_posts = count($post\_ids);
$has\_field\_posts = 0;
$updated\_posts = 0;
$log = \[\];
if ($total\_posts > 0) {
foreach ($post\_ids as $post\_id) {
$downs = get\_post\_meta($post\_id, 'b2\_single\_post\_download\_group', true);
$log\[\] = "文章ID {$post\_id}:";
if (empty($downs)) {
$log\[\] = " → 无b2\_single\_post\_download\_group字段 → 跳过";
continue;
}
$has\_field\_posts++;
$save = false;
foreach ($downs as $k => $v) {
if (isset($downs\[$k\]\['rights'\])) {
$old\_value = $downs\[$k\]\['rights'\];
$downs\[$k\]\['rights'\] = $target\_rights;
$save = true;
// 日志优化:换行符转为可视化的「↵」
$log\_old = str\_replace("\\r\\n", " ↵ ", $old\_value);
$log\_new = str\_replace("\\r\\n", " ↵ ", $target\_rights);
$log\[\] = " → 原rights值:{$log\_old}";
$log\[\] = " → 新rights值:{$log\_new}";
}
}
if ($save) {
update\_post\_meta($post\_id, 'b2\_single\_post\_download\_group', $downs);
$updated\_posts++;
$log\[\] = " → 保存成功";
} else {
$log\[\] = " → 无rights字段 → 跳过";
}
}
// 结果展示
$show\_rights = str\_replace("\\r\\n", " ↵ ", $target\_rights);
$submit\_result = '
✅ 执行完成!
- 目标分类ID:'.$target\_category\_id.'
- 目标权限值(共'.count($valid\_lines).'行):'.$show\_rights.'
- 分类下已发布文章总数:'.$total\_posts.'
- 包含目标字段的文章数:'.$has\_field\_posts.'
- 成功修改的文章数:'.$updated\_posts.'
详细日志(↵代表换行):
'.implode('
', $log).'
';
} else {
$submit\_result = '⚠️ 分类ID '.$target\_category\_id.' 下没有找到已发布的文章!
';
}
}
}
}
// 3. 前台表单界面(光标行精准修改)
?>
B2主题文章下载权限批量修改工具
\[/content\_hide\]
**Tags:** 功能插件
**Categories:** 主题美化
---