Tutor Parent Role
for Tutor LMS
Everything you need to set up and manage a parent role on your Tutor LMS site โ letting parents monitor their children’s courses, enroll them in new ones, and stay connected through a secure invitation and dashboard system.
Overview
Tutor Parent Role adds a dedicated “Parent” user role to Tutor LMS. It enables parents or guardians to monitor their children’s enrolled courses and progress, enroll them in new courses, and manage the parent-child relationship โ all without requiring any access to the WordPress admin dashboard.
The plugin is ideal for schools, tutoring platforms, and any family-oriented e-learning site where parental oversight is part of the experience.
What it does
- Creates a custom Parent role with fine-grained, minimal permissions
- Allows parents to monitor their children’s enrolled courses and progress
- Enables parents to enroll their children in courses they personally have access to
- Provides a secure email invitation system for parents to connect with their children
- Syncs enrollment access โ when a parent loses course access, their children’s enrollment is automatically cancelled
- Integrates with WooCommerce Memberships for Tutor LMS and Tutor LMS Installments
- Includes a full admin interface for managing all parent-child relationships
Key benefits
- Parental oversight of children’s online courses without giving parents any admin access
- Automated enrollment sync keeps child access aligned with parent access at all times
- Flexible role assignment โ via admin panel, user self-request, or domain whitelist
- Multi-parent support โ a child can have multiple parents, and access is only revoked when all of them lose it
- Secure invitation workflow requiring the child to confirm before a relationship is created
Requirements
Minimum requirements
| Component | Minimum version |
|---|---|
| WordPress | 5.8 or higher |
| PHP | 7.4 or higher |
| Tutor LMS | 2.0 or higher (Free or Pro) |
Recommended environment
| Component | Recommendation |
|---|---|
| WordPress | Latest version |
| PHP | 8.0 or higher |
| Tutor LMS | Latest version (Pro recommended for advanced features) |
| SMTP Plugin | e.g., WP Mail SMTP โ for reliable HTML email delivery |
| SSL Certificate | Required for secure cookie handling |
Required plugin
- Tutor LMS (Free or Pro)
Optional but recommended
- WooCommerce Memberships for Tutor LMS (Ksajie) โ for membership-based enrollment integration
- Tutor LMS Installments (Ksajie) โ for installment payment integration
- SMTP Plugin โ for reliable delivery of all invitation and notification emails
Installation
Method 1: WordPress admin upload (recommended)
- Log in to your WordPress admin dashboard
- Navigate to Plugins โ Add New
- Click Upload Plugin
- Select the
tutor-parent-role.zipfile - Click Install Now
- Click Activate Plugin
Method 2: Manual FTP installation
- Unzip the
tutor-parent-role.zipfile - Upload the
tutor-parent-rolefolder to/wp-content/plugins/ - Navigate to Plugins โ Installed Plugins in WordPress admin
- Find “Tutor Parent Role” and click Activate
Post-installation steps
- Verify Tutor LMS is active and fully configured
- Enter your license key when prompted after activation
- Navigate to Tutor โ Parent Settings and configure the role assignment mode
- Create or designate a page with the
[tutor_parent_dashboard]shortcode for the parent-facing portal - Test by assigning yourself the parent role and creating a test parent-child relationship
Configuration
Navigate to Tutor โ Parent Settings in the WordPress admin to configure the plugin.
Parent role assignment settings
| Setting | Description |
|---|---|
| Auto-Grant | When enabled, users receive the parent role immediately upon submitting a request โ no admin review required. |
| Require Admin Approval | Parent role requests are queued for manual admin review. Admins can approve or deny from the Requests page. |
| Auto-Approve Domains | Comma-separated list of email addresses or @domain.com patterns. Matching users are auto-approved without manual review. |
| Notification Email | The email address that receives admin notifications when a new role request is submitted. |
Approval logic priority
When a user submits a role request, the plugin checks in this order:
- Auto-Grant is enabled โ role granted immediately
- User’s email matches the domain whitelist โ role granted automatically
- Neither condition met โ request queued for admin review
Domain whitelist format examples
- Full email address:
parent@school.edu - Domain only:
@school.edu - Multiple entries:
@school.edu, admin@otherdomain.com, @company.org
Parent Role & Requests
The Parent role (tutor_parent) is a custom WordPress role with minimal permissions. Parents can view their children’s progress and manage enrollments from the frontend dashboard โ they have no access to the WordPress admin area.
How a user requests the parent role
Users who don’t yet have the parent role can request it from the frontend. When a logged-in user visits the page containing the [tutor_parent_dashboard] shortcode and doesn’t have the parent role, a role request form is displayed automatically.
- User visits the parent dashboard page
- A request form is shown with an optional reason field
- User submits the form โ the system checks for auto-grant or domain whitelist match
- If neither applies, a pending request is created and the admin is notified by email
- Admin reviews the request and clicks Approve or Deny from Tutor โ Requests
- User is notified by email of the decision
Users cannot submit duplicate requests. If a pending request already exists, a message is shown instead of creating another entry.
Admin role management
Admins can also manually assign or remove the parent role from any user directly from Tutor โ Parents, without the user needing to submit a request. Removing a parent’s role also removes all of their assigned children.
Parent-Child Relationships
Once a user has the parent role, they can be linked to one or more children. A child can also have multiple parents โ the plugin tracks all relationships independently.
How relationships are created
- Via email invitation โ the parent sends an invitation; the child accepts it (see Section 7)
- Via admin assignment โ an admin navigates to the parent’s detail page and adds a child directly
Admin-side relationship management
From Tutor โ Parents, admins can view any parent’s profile, add or remove children using a live AJAX user search, and see the date each relationship was created. Removing a child from a parent does not delete the child’s account or enrollments โ it only removes the link.
When a child is assigned to a parent by an admin, the parent receives an email notification automatically.
Email Invitation System
Parents can invite their children to connect using email invitations sent directly from the parent dashboard. This requires the child to actively confirm, ensuring no relationship is created without consent.
Invitation flow
- Parent enters the child’s email address in the “Invite Child” section of the dashboard
- Plugin verifies the email belongs to a registered, non-parent user not already linked
- A unique invitation code is generated, valid for 14 days
- An email is sent to the child with a link to the Tutor LMS Dashboard โ Invitations tab
- Child can accept or reject the invitation from the Invitations tab
- On acceptance, the parent-child relationship is created automatically
- Parent receives an email notification of the child’s decision
Invitation states
Invitations tab in student dashboard
The plugin automatically adds an “Invitations” tab to the Tutor LMS student dashboard for all non-parent users. Students can view pending invitations and accept or reject them directly from this tab. A template file is auto-created in the active theme on first activation โ if auto-creation fails, manual creation instructions are shown in the admin.
Course Enrollment Management
From the parent dashboard, parents can see all courses they are personally enrolled in and enroll any of their linked children in those same courses.
Enrollment rules
- A parent can only enroll a child in courses the parent themselves is actively enrolled in
- The child’s enrollment is created as immediately active โ no pending approval needed
- The enrollment is tagged with the source “parent” and includes the enrolling parent’s ID in its metadata
- If the child is already enrolled in the same course from another source (individual purchase or membership), the existing enrollment is left completely untouched
- If the child already has a parent-source enrollment in the course, the current parent is added as a co-parent without creating a duplicate enrollment
Co-parent enrollment
Multiple parents can enroll the same child in the same course. The plugin stores the list of all enrolling parent IDs on the enrollment. This is what powers the multi-parent protection in the sync system โ a child’s access is only revoked when every parent who enrolled them has lost access to that course.
Enrollment Synchronization
The enrollment sync system automatically keeps children’s course access aligned with their parent’s access. It monitors multiple WordPress and Tutor LMS events and reacts in real time.
What triggers a sync
- A parent’s enrollment post status changes (e.g., completed โ cancel)
- A parent’s enrollment is trashed or permanently deleted
- Tutor LMS fires its own enrollment cancellation or expiration hooks
- The WooCommerce Memberships plugin revokes a membership-based enrollment
- A full membership expiration event fires
- A parent purchases a new course (triggers re-enrollment of children if they were previously cancelled)
To catch cancellations made directly through the Tutor LMS admin interface, the plugin uses an admin-side change monitor: enrollment statuses are cached at the start of each admin request and compared at the end. Any changes detected trigger the sync logic automatically.
Cancellation logic
When a parent’s enrollment cancellation is detected, the plugin removes that parent from the child enrollment’s parent list, then checks whether any remaining parent still has active access to the course. If no other parent has active access, the child’s enrollment is cancelled. If at least one other parent still has access, the child’s enrollment is left untouched.
Enrollment source protection
The sync system only ever cancels enrollments with the source “parent”. Enrollments tagged as “individual”, “membership”, or “orphaned” are never touched by the parent sync logic โ a parent losing access cannot remove a child’s individually purchased course.
Re-enrollment on parent access restoration
When a parent regains access to a course (for example, by purchasing it again or renewing a membership), the plugin checks for any children whose enrollment was previously cancelled due to this parent losing access, and re-enrolls them automatically.
Parent Dashboard
The parent dashboard is the primary frontend interface for parents. It is embedded on any WordPress page using the [tutor_parent_dashboard] shortcode and renders different content depending on the user’s state.
What the dashboard shows
For a logged-in parent with children, the dashboard presents five sections:
- My Children โ list of linked children with a selector to switch the active child view
- Course Progress โ courses the selected child is enrolled in, with progress indicators
- Assign Courses โ list of the parent’s own courses with enrollment controls for each child
- Invite Child โ form to send email invitations to new children by email address
- Pending Invitations โ list of outgoing invitations with their current status and a cancel option
Dashboard states
| User state | What is shown |
|---|---|
| Not logged in | Login prompt |
| Logged in, no parent role | Parent role request form |
| Logged in, parent role, no children yet | Empty state with invitation form |
| Logged in, parent role, has children | Full dashboard with all five sections |
| Admin user | Full dashboard with access to all children and no restrictions |
The selected child is persisted via user meta and a 7-day cookie, so parents don’t need to re-select their child on every visit.
Admin Interface
All admin pages are accessible under the Tutor LMS admin menu.
Parents page (Tutor โ Parents)
Lists all users with the Parent role in a table showing display name, email, number of assigned children, registration date, and two actions: View (opens the parent detail page) and Remove Role (removes the parent role and all of their assigned children). An “Add Parent” button reveals a live user search to assign the role to any existing user.
Parent detail page
Shows full information for a single parent โ their profile information, a table of all assigned children with remove and view-profile actions, and an “Add Child” form with live AJAX search that only returns users who don’t already have the parent role and aren’t already assigned to this parent.
Requests page (Tutor โ Requests)
Two tabs: Pending and All Requests. The Pending tab lists requests awaiting review with the submitted reason and Approve/Deny buttons. The All Requests tab shows the full history with status badges, approval method, submission date, and reviewer name. A count badge appears next to the Requests menu item whenever there are pending requests waiting for review.
Email Notifications
All emails are sent as HTML using a consistent branded template. The following emails are sent automatically:
| Trigger | Recipient |
|---|---|
| Parent role request submitted | Site admin (at the configured notification email) |
| Role request approved | The requesting user |
| Role request denied | The requesting user |
| Child assigned to parent (by admin) | The parent |
| Invitation sent | The child (student) |
| Invitation accepted | The parent |
| Invitation rejected | The parent |
All email subjects are prefixed with the site name in brackets, e.g., “[My School] New Parent Role Request”. The admin notification email address is configurable in Tutor โ Parent Settings.
Shortcode
Only create one page with this shortcode. The plugin uses this page as the destination for email invitation links โ multiple pages with the shortcode can cause link routing issues.
Frequently Asked Questions
Troubleshooting
Before reporting an issue, enable WordPress debug logging (WP_DEBUG_LOG in wp-config.php). All plugin log entries are prefixed with [Tutor Parent Role] for easy filtering.
The plugin clears user caches after adding the role. If the role still doesn’t appear:
- Ask the user to log out and log back in
- If you use a caching plugin, flush all caches โ stale cached sessions may serve outdated role data
- Check the error log for lines starting with
[Tutor Parent Role]to confirm the role addition was processed
The enrollment sync monitors multiple hooks but relies on the enrollment being accessible at the time the hook fires. Verify:
- The parent’s enrollment status is truly “cancel” โ not just unpublished or in a draft state
- The child’s enrollment has source “parent” โ enrollments with other sources are intentionally protected and will not be affected
- Check the error log for “[Tutor Parent Role] Processing cancellation” messages to trace the sync execution
- If the cancellation was made via the Tutor LMS admin interface, it may have been caught by the admin-side change monitor on shutdown โ confirm no other process overrode the status after the shutdown hook ran
The Invitations tab is added via a Tutor LMS dashboard filter. If it does not appear:
- Verify the template file exists at
{active-theme}/tutor/dashboard/invitations.php - Check the admin notice on the Plugins or Tutor screens โ if auto-creation failed, manual creation instructions are shown there
- Check the browser console for JavaScript errors on the invitations page, as assets are injected inline via
wp_head
The plugin performs a self-healing check once per day. If a table is found to be missing, it is recreated automatically. If you suspect a table is missing and need to force a recreation immediately, deactivate and reactivate the plugin โ this triggers the table creation routine again.
All emails use WordPress’s built-in wp_mail() function. If emails are not arriving:
- Install and configure a transactional SMTP plugin (e.g., WP Mail SMTP) โ this is the most common cause of missed WordPress emails
- Check that the notification email address in Tutor โ Parent Settings is correct
- Check your server’s email logs โ the email may be sending successfully but getting caught by spam filters on the recipient’s end
Support
Need help? Visit the support portal
If you’re experiencing an issue not covered in this documentation or the troubleshooting section, you can submit a support request through the portal. Please include the details below in your message to help us resolve your issue quickly.
Open Support Portal โWP_DEBUG_LOG in wp-config.php)