V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
masy
V2EX  ›  WordPress

wordpress 多用户,怎样加密/或屏蔽/或 404 某个“作者”的所有文章,且后期可恢复

  •  
  •   masy · 2020-08-15 16:55:52 +08:00 · 1990 次点击
    这是一个创建于 1560 天前的主题,其中的信息可能已经有所发展或是发生改变。
    要求就是暂时让某个用户“作者”的所有文章批处理为对外不可访问,且后期可以随时恢复。

    我的思路是管理员后台批量编辑某个用户的文章,状态从“已发布”改为“等待复审”(这里用户的权限已做了处理,不能自己恢复,不考虑使用回收站功能是因为回收站里也有一些帖子避免混到一起)
    但是,后台文章列表每页显示的数目太少,某些用户有几千篇文章的话需要翻几百页进行勾选批量处理,太麻烦,只能放弃。

    求助是否有其他快捷方法或插件可实现,数据库批处理操作也可以。
    5 条回复    2020-08-15 18:55:08 +08:00
    ponote
        1
    ponote  
       2020-08-15 17:05:46 +08:00
    方案一:
    SQL 批量处理,最简单,将该用户的所有文章状态修改为待审核

    方案二:
    在页面请求的时候,在 WP_query 中适用 author__not_in,将该作者剔除

    方案三:
    后台筛选出该作者的文章,全选批量删除,切记不要清空回收站,后期可恢复
    ponote
        2
    ponote  
       2020-08-15 17:39:22 +08:00
    ```
    UPDATE wp_posts SET post_status='pending' WHERE post_author=1 AND post_type='post';
    ```
    post_author 后面的 id 改成目标作者 id 即可

    下次需要重新显示出来的时候:
    还是上面的脚本,只是将 post_status='pending' 改成 post_status='publish' 即可,记得加上作者 id

    记得修改表前缀,模式 wp_
    masy
        3
    masy  
    OP
       2020-08-15 18:20:19 +08:00
    @ponote 谢谢。
    在这期间我又想了一个方法:
    在文章模板上方加一段代码不知是否可行
    ```
    <?php
    $author = $post->ID;
    //禁止显示 id 为 5,6,7 的文章;
    if ($author == '5' or $author == '6' or $author == '7'){
    header('Location:404.php');
    die;}
    ?>
    ```
    masy
        4
    masy  
    OP
       2020-08-15 18:40:58 +08:00
    @masy
    这里应该是
    $author = get_post($id)->post_author;
    falcon05
        5
    falcon05  
       2020-08-15 18:55:08 +08:00
    加个钩子函数
    add_action('pre_get_posts', function($query){
    if(!is_admin()){
    $query->set('author__not_in', array( 用户 ID1, 用户 ID2));
    }
    });
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2937 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 03:46 · PVG 11:46 · LAX 19:46 · JFK 22:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.