根据用户角色将帖子状态更改为待处理

2024-06-21

我有会员网站,用户必须付费才能订阅。当用户订阅时,他的角色变为“成员”,现在可以发布到名为“用户配置文件”的自定义帖子类型

我想要做的是将所有已发布帖子的状态更改为该帖子类型中的待处理,例如,如果用户角色更改为“已过期”

我尝试了这个,但似乎没有任何效果

 function auto_expire_posts(){
    global $wpdb, $wp_roles;
      //get all post ids of published posts.
      $post_ids = $wpdb->get_results( "SELECT * FROM $wpdb->posts WHERE post_status = 'publish' ");

foreach($post_ids as $id){
$postid =  $id->ID;
if ($_GET['role'] == "expired" ) 
    {
        $profile_post = array();
        $profile_post['ID'] = $postid;
        $profile_post['post_status'] = 'pending';
        // Update the post into the database
         wp_update_post( $profile_post );

       }
}
}
add_action('set_user_role', 'auto_expire_posts');

从根本上来说,你的函数应该具有所有帖子均已过期。从功能上来说,它是有效的,所以当你说“没有效果”时,这是令人惊讶的。

你的职能应该修改下面,为了提高效率(您不需要循环帖子)并确保您只更新相关帖子,并确保它不会引发通知。

修改后的代码:

// This action passes 3 parameters, so let's accept them - $user_id, $new_role, $old_roles
function auto_expire_posts( $user_id, $new_role, $old_roles ) {
    // If the user didn't USED to be a member, then no need to do anything
    if ( ! in_array( 'member', $old_roles ) ) {
        return;
    }

    global $wpdb;

    // Set the array of values to update
    $update = array(
        'post_status' => 'expired'
    );

    // Set the array that defines the "WHERE" clause
    // WHERE is ONLY published posts that are authored by the specified user
    $where = array(
        'post_status' => 'publish',
        'post_author' => $user_id
    );

    // $updated will contain the number of posts changed
    $updated = $wpdb->update( $wpdb->posts, $update, $where );
}

// Ensure the add_action passes the 3 parameters through (10 is the priority, 3 is the number of parameters)
add_action( 'set_user_role', 'auto_expire_posts', 10, 3 );

这是经过测试的,我已经证明它是有效的。However您可能会发现它没有达到您想要的效果的原因有很多:

  1. 这是利用do_action('set_user_role')这是 WordPress 的核心。这个钩子可能不会被称为取决于您如何更改用户的角色。这个钩子确实被叫到如果您通过仪表板转到用户的个人资料,更改角色,然后单击“保存用户”。如果不起作用,请务必准确解释您将如何改变角色。
  2. 如果您使用的角色不称为“成员”,则此操作将不起作用。如有必要,请更改上面的代码(我使用“成员”)以匹配您实际使用的角色。如果它不起作用,请务必准确解释您正在使用的角色名称。
  3. “过期”不是我熟悉的帖子状态。我相信这会抑制帖子的显示,但也可能不会。如果不起作用,请务必查看数据库以查看帖子状态是否发生变化.
  4. 如果您没有在(多个)适当位置安装此函数/挂钩,那么它可能不会被调用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据用户角色将帖子状态更改为待处理 的相关文章

  • 在php中获取二进制数据大小的正确方法是什么?

    我已阅读文件的一部分 现在想确保该部分的大小正确 我怎样才能在 php 中做到这一点 part fread file 1024 return some function part 1024 我已经阅读了这些示例 但我怀疑是否要使用 strl
  • PHP 有效读取 csv 文件

    有几种使用 PHP 读取 CSV 文件的方法 我以前用过explode函数将每一行放入一个数组中 然后explode逗号并使用trim删除数据周围的任何引号 本来就很乱 PHP 5 现在有fgetcsv和 str getcsv 我猜这是这些
  • 返回变量在 PHP 中不起作用(即没有返回值!)

    我更喜欢使用 Python 语言进行编程 但必须使用 PHP 来处理特定的网站应用程序项目 在 PHP 中 我试图将函数中的值 返回 到主程序环境 用于后续计算 但无论我尝试什么 函数中计算的值都不会返回该值 而是从函数中回显 工作正常 在
  • 计算两个数字之间的差异

    我想计算两个给定数字之间的差异 例如 1 5 或 24 35 我必须将数组中的数字分开并写出它们之间的差异 如下所示 1 2 3 4 5 或 24 25 26 27 28 29 30 31 32 33 34 35 是否有任何 php 函数可
  • 如何通过键查找最大和最小日期

    我有一个数组 a array 2010 05 03 gt 100 2010 05 04 gt 400 2008 05 01 gt 800 2011 01 01 gt 800 我如何找到最大值和最小值key date 例如 max gt 20
  • 如何为 Lumen 的封闭路线指定路线名称?

    您好 我有以下流明路线 router gt get end function Illuminate Http Request request use router controller router gt app gt make App H
  • mongodb对话系统

    我正在实施一个verymongodb 上的简单对话系统 这个想法应该是 当我打开一个 convo 时 它应该显示发送和接收的消息 到目前为止一切正常 并且应该非常容易 通过使用像这样的伪代码这样的简单查询 from my id AND to
  • 如何创建一个 WordPress 主页滑块,其中包含来自 4 个独特类别的最新或精选帖子的多个查询?

    我正在为我正在构建的 WordPress 网站创建一个滑块 我尝试构建的滑块共有 4 个幻灯片 框架 每个框架都需要显示特定类别中的最新帖子或特定类别中的特色帖子 我的意思是 4 张幻灯片 框架中的每张都代表一个单独的类别 Slide Fr
  • 这些加密算法有什么区别?

    两者有什么区别MCRYPT RIJNDAEL 128 MCRYPT RIJNDAEL 256 MCRYPT BLOWFISH等等 哪一种最适合网络数据传输 Rijandel 是 AES 的另一个名称 AES 是当前的 一个好的标准 算法 数
  • 如何在 PHP 中正确分割路径

    执行以下操作的最佳方法是什么 我通过 AJAX 请求获取路径 e g dir1 dir2 dir3 dir4 我需要在我的网页上这样展示它 dir1 gt gt dir2 gt gt dir3 gt gt dir4 它们每个都是 html
  • PHP 警告 ZipArchive::extractTo():权限被拒绝

    我创建了一个应用程序 它使用 ZipArchive 类 php 中的标准 中的方法 extractTo 并在 Windows 7 上的本地主机 apache 服务器上对其进行了测试 没有任何问题 但是当我在一些unix生产服务器上尝试过它之
  • 配置 .htaccess 以在 PHP 框架 (Silex) 上工作

    我的 Apache2 本地主机 linux 上有一个工作路径 http localhost lab silex web index php hello name 我想成为 http localhost lab silex hello nam
  • 如何将 ctype_alpha 与 UTF-8 结合使用

    如何将 ctype alpha 与 UTF 8 一起使用 我有这个代码 if empty POST false if isset POST first name empty POST first name if ctype alpha PO
  • 如何在javascript中使用自动递增id?

  • 需要 mysqli_fetch_all 的替代方案

    我有一个 php mysqli 代码 可以找到一个我的本地服务器 但是在我的服务器上使用它时 我得到了一个 Fatal error Call to undefined function mysqli fetch all in home3 t
  • Yii2 DropDownList Onchange 更改自动完成小部件“源”属性?

    我已经尝试过这个 yii2 依赖的自动完成小部件 https stackoverflow com questions 27025791 yii2 dependent autocomplete widget 但我不知道为什么它不起作用 这是我
  • 如何覆盖 phpunit 中导出的变量?

    我知道我可以设置环境变量 https phpunit de manual current en appendixes configuration html在我的 phpunit xml 里面
  • 使用 php 和 symfony 从数组创建 Excel 文件

    我正在尝试使用 PHP 和 symfony 将数组导出为 XLS 文件 如下面的代码所示 创建 XLS 文件后 我只能获取数组的最后一行 并且它显示在文件的第一行中 似乎 lignes 变量没有增加 我不明白出了什么问题 有人可以帮忙吗 f
  • 如何显示不同页眉的页面? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在为我的学校项目开发网站 但我遇到了一个问题 我在每个页面上显示一个标题 我的标题之一包含登录表单 另一标题包含用户名 搜索栏等 问题是
  • 处理查询字符串参数时 Codeigniter 缓存问题

    问候 我正在编写一个 CI Web 应用程序 它实现标准文件缓存功能 如下所示 this gt output gt cache n 我使用了段和查询字符串参数的组合 因此似乎遇到了问题 我在用例和输出类代码中看到的是 缓存仅基于段 像这样

随机推荐