我可以为Learndash课程创建一个自动注册WP角色的函数吗?

3

目前,LearnDash有一个功能(要添加到functions.php中),可以自动让特定用户加入课程。我想知道是否能在我的主题的函数文件中添加一个简单的功能,并将其从user_id更改为user ROLE?这样,该角色中的每个用户都将被注册。

以下是起点代码(在Learndash的开发部分找到):

 //* To enroll user to course:
ld_update_course_access($user_id, $course_id, $remove = false);

我尝试过以下方法:

//* Add users to course by role
ld_update_course_access($role_name = Subscriber, $course_id = 949, $remove = false);

在“编辑课程”页面编辑器中,我现在看到“1,0,12,订阅者”在“课程访问列表”内,但它实际上不起作用。显然,该访问列表仅与用户一起工作。
我的思路是创建一个函数: 1)从用户角色“My-Custom-Role”获取用户ID 2)返回ID并更新课程访问权限。
这样的功能是否可行?
2个回答

4

没问题,完全可以做到。函数get_users()可以让您按角色获取用户列表。请参见:https://codex.wordpress.org/Function_Reference/get_users

例如:

$users = get_users( [ 'role__in' => [ 'subscriber', 'author' ] ] );

foreach ( $users as $user ) {
    ld_update_course_access( $user->ID, 949, false );
}

感谢@Linnea Huxford的指导,但我仍然卡住了,因为我现在返回数组(课程访问列表现在读取“1,0,12,array”),但我似乎没有生成逗号分隔的值。这是我使用的$users = get_users( [ 'role__in' => [ 'subscriber', 'author' ] ] ); foreach ( $users as $user ) { echo ld_update_course_access($user->user_id, $course_id = 949, $remove = false); }我还读到可能会生成一个相当大的查询...有没有一种只查询“ID”的方法? - jimmyjames
我已经更新了我的答案,并提供了代码示例。我认为你很接近正确,但在调用PHP函数时,只需放置参数的值即可。将等号和值放在一起是不正确的。 - Linnea Huxford
另一个问题是你必须想出一种方法,只运行一次这段代码。你肯定不希望在每个页面加载时都这样做。我建议研究一下保存选项或短暂状态的方法,在运行此代码之前检查其值。或者,你可以编写一个 CLI 命令来完成这个任务,然后只运行一次即可。 - Linnea Huxford
我对函数还非常陌生,但似乎将其编写为选项或瞬态将是理想的。我会试着玩一段时间。只是想添加一条注释,说明你的代码有效。 - jimmyjames

1
我与开发团队合作,提出了一种不同但不完整的解决方案,因此我将Linnea的解决方案标记为正确,因为它按要求在问题中起作用。这个解决方案通过他们的访问钩子sfwd_lms_has_access进行操作,但是“课程列表”从未更新,因此用户直到开始课程才被正式“注册”。我的意思是,您在他们的个人资料中看不到他们注册课程,但是如果他们开始上课,所有内容就会突然出现!我认为在这里发布可能有助于任何人作为起点。
add_filter( 'sfwd_lms_has_access', function( $return, $post_id, $user_id ) {

        if ( empty( $user_id ) ) {

                $user_id = get_current_user_id();

        }

if(empty($user_id))

return $return;

$course_id = learndash_get_course_id( $post_id );

$allowed_course_ids = array( 949, 1135 );

if( !in_array($course_id, $allowed_course_ids))

return $return;

if(user_can($user_id, "3a_textbook"))

return true;

if(user_can($user_id, "subscriber"))

return true;

return $return;

}, 10, 3 );

这在第3版中仍然有效吗?如果是,它只运行一次吗,就像她之前所警告的那样? - Shane
1
@Shane 我相信是这样的。我不再使用它了,因为我正在通过另一种方法注册。这是在Bitbucket上的“官方”代码。https://bitbucket.org/snippets/learndash/6ogzo/enroll-courses-based-on-user-role-or - jimmyjames

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接