{"id":198690,"date":"2025-07-17T07:17:05","date_gmt":"2025-07-17T07:17:05","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/tutor-lms-custom-user-registration-fields\/"},"modified":"2026-05-17T03:23:14","modified_gmt":"2026-05-17T03:23:14","slug":"custom-user-registration-fields-tutor-lms","status":"publish","type":"plugin","link":"https:\/\/fuc.wordpress.org\/plugins\/custom-user-registration-fields-tutor-lms\/","author":20447401,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.4","stable_tag":"trunk","tested":"6.8.5","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Custom User Registration Fields for Tutor LMS","header_author":"userelements","header_description":"Add Custom User Registration Fields for Tutor LMS","assets_banners_color":"ccd4fb","last_updated":"2026-05-17 03:23:14","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/userelements.com\/custom-registration-fields-tutor-lms\/","header_author_uri":"https:\/\/userelements.com\/","rating":3,"author_block_rating":0,"active_installs":300,"downloads":1596,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2":{"tag":"1.2","author":"userelements","date":"2025-07-17 07:18:25"},"1.3":{"tag":"1.3","author":"userelements","date":"2025-08-23 06:55:06"},"1.4":{"tag":"1.4","author":"userelements","date":"2026-05-17 03:24:34"}},"upgrade_notice":{"2.0.0":"<p>Major update fixing all known bugs including fields not appearing in the Tutor dashboard and LMS Manager backend. Existing field configurations are migrated automatically \u2014 no data loss. Adds field types, required toggle, and placeholders.<\/p>"},"ratings":{"1":0,"2":0,"3":1,"4":0,"5":0},"assets_icons":[],"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3534192,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3534192,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2","1.3","1.4"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3534192,"resolution":"1","location":"assets","locale":"","width":1333,"height":530},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3534192,"resolution":"2","location":"assets","locale":"","width":158,"height":420}},"screenshots":{"1":"Settings page \u2014 Student Registration Fields tab. Add labels, meta keys, field types, required toggle, and placeholders.","2":"Settings page \u2014 Instructor Registration Fields tab. Independent field configuration for instructor registration.","3":"Student registration form with custom fields rendered in the Tutor LMS form grid.","4":"Instructor registration form showing custom fields.","5":"Tutor LMS frontend dashboard profile settings \u2014 custom fields visible and editable by the user.","6":"Tutor LMS admin backend user metabox \u2014 all custom field data visible to LMS Managers."}},"plugin_section":[],"plugin_tags":[2010,2195,197519,179218,21524],"plugin_category":[],"plugin_contributors":[210940],"plugin_business_model":[],"class_list":["post-198690","plugin","type-plugin","status-publish","hentry","plugin_tags-custom-fields","plugin_tags-lms","plugin_tags-registration-fields","plugin_tags-tutor-lms","plugin_tags-user-fields","plugin_contributors-userelements","plugin_committers-userelements"],"banners":{"banner":"https:\/\/ps.w.org\/custom-user-registration-fields-tutor-lms\/assets\/banner-772x250.png?rev=3534192","banner_2x":"https:\/\/ps.w.org\/custom-user-registration-fields-tutor-lms\/assets\/banner-1544x500.png?rev=3534192","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/custom-user-registration-fields-tutor-lms_ccd4fb.svg","icon_2x":false,"generated":true},"screenshots":[{"src":"https:\/\/ps.w.org\/custom-user-registration-fields-tutor-lms\/assets\/screenshot-1.png?rev=3534192","caption":"Settings page \u2014 Student Registration Fields tab. Add labels, meta keys, field types, required toggle, and placeholders."},{"src":"https:\/\/ps.w.org\/custom-user-registration-fields-tutor-lms\/assets\/screenshot-2.png?rev=3534192","caption":"Settings page \u2014 Instructor Registration Fields tab. Independent field configuration for instructor registration."}],"raw_content":"<!--section=description-->\n<p><strong>Custom User Registration Fields for Tutor LMS<\/strong> lets you add any extra fields to your Tutor LMS student and instructor registration forms \u2014 without writing a single line of code.<\/p>\n\n<p>Need to collect a phone number at registration? A company name, teaching qualification, or country? Configure it in two minutes from the WordPress admin panel and the field appears on your registration form automatically.<\/p>\n\n<p>Unlike generic custom field plugins, this plugin is built specifically for Tutor LMS. Every field you add is displayed in all the places your team actually works:<\/p>\n\n<ul>\n<li>\u2705 <strong>Student registration form<\/strong> \u2014 fields appear automatically.<\/li>\n<li>\u2705 <strong>Instructor registration form<\/strong> \u2014 separate field sets for instructors.<\/li>\n<li>\u2705 <strong>Tutor LMS frontend dashboard<\/strong> \u2014 students and instructors can view and update their own data from the Tutor profile settings page.<\/li>\n<li>\u2705 <strong>Tutor LMS admin backend<\/strong> \u2014 LMS Managers can read and edit all custom field data from Tutor's built-in user management interface.<\/li>\n<li>\u2705 <strong>WordPress admin profile pages<\/strong> \u2014 data also visible in the standard WP admin for admins who work there.<\/li>\n<\/ul>\n\n<h4>Field types supported<\/h4>\n\n<ul>\n<li>Text<\/li>\n<li>Phone (tel)<\/li>\n<li>Email<\/li>\n<li>Number<\/li>\n<li>URL \/ Website<\/li>\n<li>Date<\/li>\n<li>Textarea (multi-line)<\/li>\n<li>Select \/ Dropdown (with your own options)<\/li>\n<\/ul>\n\n<h4>Key features<\/h4>\n\n<p><strong>No-code field builder<\/strong> \u2014 add, edit, and reorder fields from a clean settings page. No PHP, no shortcodes, no template editing required.<\/p>\n\n<p><strong>Required or optional<\/strong> \u2014 toggle each field as required or optional directly in the settings UI. Required fields enforce completion at registration.<\/p>\n\n<p><strong>Separate student and instructor field sets<\/strong> \u2014 configure entirely different fields for the student registration form and the instructor registration form.<\/p>\n\n<p><strong>Placeholder text<\/strong> \u2014 set placeholder text per field to guide users on what to enter.<\/p>\n\n<p><strong>Dropdown options<\/strong> \u2014 for Select fields, define your options list (one per line) directly in the settings panel.<\/p>\n\n<p><strong>Automatic data display<\/strong> \u2014 data saved at registration is immediately visible on the Tutor frontend dashboard profile, the Tutor admin backend, and the WP admin user profile. Updating data from any of these locations works correctly.<\/p>\n\n<p><strong>v1.x upgrade safe<\/strong> \u2014 existing field configurations from plugin version 1.x are automatically migrated to the v2.0 data format on first activation. No data loss.<\/p>\n\n<h4>Who is this plugin for?<\/h4>\n\n<ul>\n<li>Tutor LMS site owners who need to capture extra information at registration (phone, company, qualifications, country, etc.)<\/li>\n<li>Online course platforms that need instructor vetting fields (teaching experience, certifications, areas of expertise)<\/li>\n<li>LMS admins who need to view and manage that data without leaving the Tutor interface<\/li>\n<\/ul>\n\n<h4>How it works<\/h4>\n\n<ol>\n<li>Install and activate the plugin (Tutor LMS must also be active).<\/li>\n<li>Go to <strong>Users \u2192 Tutor LMS Fields<\/strong> in your WordPress admin.<\/li>\n<li>Add fields under the <strong>Student Registration Fields<\/strong> or <strong>Instructor Registration Fields<\/strong> tab.<\/li>\n<li>Give each field a label, a meta key, a type, and optionally a placeholder or select options.<\/li>\n<li>Save \u2014 fields appear on the registration forms immediately.<\/li>\n<\/ol>\n\n<h4>Developer notes<\/h4>\n\n<p>All field values are stored as standard WordPress user meta, accessible via <code>get_user_meta( $user_id, 'your_meta_key', true )<\/code>.<\/p>\n\n<p>The plugin hooks into the correct Tutor LMS action hooks:<\/p>\n\n<ul>\n<li><code>tutor_student_reg_form_end<\/code> \u2014 student registration form display<\/li>\n<li><code>tutor_instructor_reg_form_end<\/code> \u2014 instructor registration form display<\/li>\n<li><code>tutor_profile_edit_input_after<\/code> \u2014 Tutor frontend dashboard profile edit<\/li>\n<li><code>tutor_profile_update_after<\/code> \u2014 Tutor frontend profile save (AJAX)<\/li>\n<li><code>tutor_backend_profile_fields_after<\/code> \u2014 Tutor admin backend metabox<\/li>\n<li><code>show_user_profile<\/code> \/ <code>edit_user_profile<\/code> \u2014 WP admin profile pages<\/li>\n<li><code>user_register<\/code> \u2014 registration save<\/li>\n<li><code>personal_options_update<\/code> \/ <code>edit_user_profile_update<\/code> \u2014 WP admin profile save<\/li>\n<\/ul>\n\n<h4>More plugins by UserElements<\/h4>\n\n<ul>\n<li><a href=\"https:\/\/userelements.com\/\">UM Widgets for Elementor<\/a><\/li>\n<li><a href=\"https:\/\/userelements.com\/wp-user-data\/\">WP User Data<\/a><\/li>\n<li><a href=\"https:\/\/userelements.com\/user-broadcast-email\/\">User Broadcast Email<\/a><\/li>\n<li><a href=\"https:\/\/userelements.com\/mightymenu-tutorlms\/\">Personalized User Menu for Tutor LMS<\/a><\/li>\n<\/ul>\n\n<!--section=installation-->\n<p><strong>From WordPress.org (recommended)<\/strong><\/p>\n\n<ol>\n<li>In your WordPress admin, go to <strong>Plugins \u2192 Add New Plugin<\/strong>.<\/li>\n<li>Search for <strong>Custom User Registration Fields for Tutor LMS<\/strong>.<\/li>\n<li>Click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<\/ol>\n\n<p><strong>Manual installation<\/strong><\/p>\n\n<ol>\n<li>Download the plugin ZIP file.<\/li>\n<li>In your WordPress admin, go to <strong>Plugins \u2192 Add New Plugin \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Upload the ZIP file and click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<\/ol>\n\n<p><strong>After activation<\/strong><\/p>\n\n<ol>\n<li>Go to <strong>Users \u2192 Tutor LMS Fields<\/strong> in your WordPress admin.<\/li>\n<li>Add your custom fields under the Student or Instructor tabs.<\/li>\n<li>Save \u2014 fields appear on the Tutor LMS registration forms immediately.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20require%20tutor%20lms%3F\"><h3>Does this plugin require Tutor LMS?<\/h3><\/dt>\n<dd><p>Yes. This plugin is built specifically for Tutor LMS and requires it to be installed and active. It will not activate without Tutor LMS present.<\/p><\/dd>\n<dt id=\"i%20added%20fields%20but%20they%20don%27t%20appear%20in%20the%20tutor%20dashboard.%20what%27s%20wrong%3F\"><h3>I added fields but they don't appear in the Tutor dashboard. What's wrong?<\/h3><\/dt>\n<dd><p>Make sure you saved your fields on the settings page (Users \u2192 Tutor LMS Fields). Also confirm that you are viewing the correct tab \u2014 student fields only appear for students; instructor fields only appear for users who have instructor status in Tutor LMS.<\/p><\/dd>\n<dt id=\"where%20exactly%20do%20students%20and%20instructors%20see%20their%20custom%20field%20data%3F\"><h3>Where exactly do students and instructors see their custom field data?<\/h3><\/dt>\n<dd><p>After registering, users can view and update their custom field data from the Tutor LMS frontend dashboard profile settings page (the same place they update their photo, bio, and job title). LMS Managers can view and edit the same data from Tutor's admin backend.<\/p><\/dd>\n<dt id=\"can%20i%20add%20different%20fields%20for%20students%20and%20instructors%3F\"><h3>Can I add different fields for students and instructors?<\/h3><\/dt>\n<dd><p>Yes. The plugin has two completely separate field sets: one for the student registration form and one for the instructor registration form. Configure them independently under the two tabs on the settings page.<\/p><\/dd>\n<dt id=\"can%20i%20make%20a%20field%20required%3F\"><h3>Can I make a field required?<\/h3><\/dt>\n<dd><p>Yes. Each field has a Required toggle in the settings UI. Required fields enforce completion at the registration form level.<\/p><\/dd>\n<dt id=\"what%20field%20types%20are%20available%3F\"><h3>What field types are available?<\/h3><\/dt>\n<dd><p>Text, Phone, Email, Number, URL\/Website, Date, Textarea, and Select\/Dropdown. For Select fields, you define your own options list (one per line) in the settings.<\/p><\/dd>\n<dt id=\"how%20is%20the%20data%20stored%3F\"><h3>How is the data stored?<\/h3><\/dt>\n<dd><p>All values are stored as standard WordPress user meta using the meta key you define. You can read them anywhere with <code>get_user_meta( $user_id, 'your_meta_key', true )<\/code>.<\/p><\/dd>\n<dt id=\"can%20i%20use%20this%20with%20woocommerce%2C%20buddypress%2C%20or%20other%20plugins%3F\"><h3>Can I use this with WooCommerce, BuddyPress, or other plugins?<\/h3><\/dt>\n<dd><p>The plugin stores data as standard user meta, so it is readable by any plugin that reads user meta. The registration form integration and profile display are Tutor LMS-specific.<\/p><\/dd>\n<dt id=\"i%20upgraded%20from%20v1.x%20%E2%80%94%20are%20my%20existing%20fields%20still%20there%3F\"><h3>I upgraded from v1.x \u2014 are my existing fields still there?<\/h3><\/dt>\n<dd><p>Yes. The plugin automatically migrates your v1.x field configuration to the new v2.0 format on first activation. All existing field labels and meta keys are preserved. You will now see additional options (field type, required toggle, placeholder) for each migrated field.<\/p><\/dd>\n<dt id=\"can%20i%20reorder%20fields%3F\"><h3>Can I reorder fields?<\/h3><\/dt>\n<dd><p>You can remove and re-add fields in any order. Drag-and-drop ordering is planned for a future release.<\/p><\/dd>\n<dt id=\"does%20this%20work%20with%20tutor%20lms%20pro%3F\"><h3>Does this work with Tutor LMS Pro?<\/h3><\/dt>\n<dd><p>Yes. The plugin is compatible with both the free and Pro versions of Tutor LMS.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4: May 2026<\/h4>\n\n<ul>\n<li>Complete rewrite \u2014 all code from v1.x replaced.<\/li>\n<li>Fixed: Custom fields were not displayed in the Tutor LMS frontend dashboard profile settings page. Added <code>tutor_profile_edit_input_after<\/code> and <code>tutor_profile_update_after<\/code> hooks.<\/li>\n<li>Fixed: Custom fields were not visible to LMS Managers in the Tutor admin backend. Added <code>tutor_backend_profile_fields_after<\/code> hook.<\/li>\n<li>Fixed: PHP warning on the \"Add New User\" page \u2014 <code>user_new_form<\/code> passes a string, not a WP_User. Now guarded with <code>instanceof WP_User<\/code> check.<\/li>\n<li>Fixed: \"Remove\" button on dynamically added field rows had no event handler. Replaced <code>forEach<\/code> initialization with event delegation on the parent container.<\/li>\n<li>Fixed: Missing <code>tutor-form-row<\/code> wrapper caused custom fields to break the Tutor registration form CSS grid layout.<\/li>\n<li>Fixed: Duplicate save logic \u2014 two functions were both hooked to <code>user_register<\/code>, one silently failing due to a <code>current_user_can<\/code> check that always returns false for new users during registration. Consolidated into a single <code>tutor_cuf_persist()<\/code> function.<\/li>\n<li>Fixed: Duplicate <code>id=\"submit\"<\/code> HTML attribute on both form submit buttons. Now uses unique names without duplicate IDs.<\/li>\n<li>Fixed: <code>Requires Plugins<\/code> header was duplicated in the plugin file.<\/li>\n<li>Fixed: PHP version mismatch between plugin header (7.4) and readme.txt (7.2). Both now declare 7.4.<\/li>\n<li>Fixed: Settings page array index mismatch \u2014 if label and meta key arrays had different lengths, data could be silently corrupted. Now uses null coalescing.<\/li>\n<li>New: Field type selector \u2014 Text, Phone, Email, Number, URL, Date, Textarea, Select\/Dropdown.<\/li>\n<li>New: Required field toggle \u2014 mark fields as required or optional per field.<\/li>\n<li>New: Placeholder text \u2014 set per-field placeholder text.<\/li>\n<li>New: Select field options \u2014 define dropdown options (one per line) in the settings UI.<\/li>\n<li>New: Type-aware sanitization \u2014 URL fields use <code>esc_url_raw()<\/code>, email uses <code>sanitize_email()<\/code>, etc.<\/li>\n<li>New: Automatic v1.x data migration \u2014 existing field configurations are migrated on first activation.<\/li>\n<li>New: Meta key auto-sanitization in the admin JS \u2014 invalid characters are replaced as the user types.<\/li>\n<li>New: Frontend CSS for required field asterisk and Tutor dashboard profile section headings.<\/li>\n<li>Changed: Option keys renamed from <code>tutor_field_cuf_fields<\/code>\/<code>tutor_field_cif_fields<\/code> to <code>tutor_cuf_student_fields<\/code>\/<code>tutor_cuf_instructor_fields<\/code>. Migration runs automatically.<\/li>\n<li>Changed: Settings page tab navigation now uses URL parameters instead of JavaScript <code>display:none<\/code> toggling, making it compatible with the WordPress admin back button.<\/li>\n<\/ul>\n\n<h4>1.3: August 2024<\/h4>\n\n<ul>\n<li>Fixed: <code>update_user_meta<\/code> error preventing proper data saving.<\/li>\n<\/ul>\n\n<h4>1.2: August 2024<\/h4>\n\n<ul>\n<li>Fixed: Tested up to value.<\/li>\n<li>Added: <code>wp_enqueue<\/code> commands.<\/li>\n<li>Fixed: Internationalization.<\/li>\n<li>Prefixed options and transients.<\/li>\n<\/ul>\n\n<h4>1.1: August 2024<\/h4>\n\n<ul>\n<li>Fixed: Plugin name.<\/li>\n<\/ul>\n\n<h4>1.0: August 2024<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Add custom fields to your Tutor LMS student and instructor registration forms. Collect phone numbers, company names, qualifications, and more \u2014 visibl &hellip;","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/198690","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=198690"}],"author":[{"embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/userelements"}],"wp:attachment":[{"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=198690"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=198690"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=198690"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=198690"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=198690"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=198690"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}