# This is the section to replace (lines 186-209) # OLD CODE: $has_pending = false; if (!empty($userspn_fields)) { foreach ($userspn_fields as $field) { // Skip if not required if (empty($field['required']) || !$field['required']) { continue; } // Check if field is visible based on parent dependencies $is_visible = $this->userspn_is_field_visible($field, $userspn_fields, $user_id); // Only check if field is empty when it's actually visible if ($is_visible && empty(get_user_meta($user_id, $field['id'], true))) { $has_pending = true; break; } } } if ($has_pending) { wp_enqueue_script($this->plugin_name . '-profile-fields-validation', USERSPN_URL . 'assets/js/userspn-profile-fields-validation.js', ['jquery', $this->plugin_name . '-popups', $this->plugin_name], $this->version, false); } # NEW CODE with debugging: $has_pending = false; $debug_fields = []; $pending_fields = []; if (!empty($userspn_fields)) { foreach ($userspn_fields as $field) { $field_id = isset($field['id']) ? $field['id'] : 'unknown'; $field_label = isset($field['label']) ? $field['label'] : $field_id; // Debug info for this field $debug_info = [ 'id' => $field_id, 'label' => $field_label, 'required' => !empty($field['required']) && $field['required'], 'has_parent' => !empty($field['parent']) && $field['parent'] !== 'this', 'parent' => isset($field['parent']) ? $field['parent'] : null, 'parent_option' => isset($field['parent_option']) ? $field['parent_option'] : null, ]; // Skip if not required if (empty($field['required']) || !$field['required']) { $debug_info['status'] = 'skipped_not_required'; $debug_fields[] = $debug_info; continue; } // Check if field is visible based on parent dependencies $is_visible = $this->userspn_is_field_visible($field, $userspn_fields, $user_id); $field_value = get_user_meta($user_id, $field['id'], true); $debug_info['is_visible'] = $is_visible; $debug_info['current_value'] = $field_value; $debug_info['is_empty'] = empty($field_value); // If has parent, get parent value for debugging if (!empty($field['parent']) && $field['parent'] !== 'this') { $debug_info['parent_current_value'] = get_user_meta($user_id, $field['parent'], true); } // Only check if field is empty when it's actually visible if ($is_visible && empty($field_value)) { $debug_info['status'] = 'PENDING - visible and empty'; $has_pending = true; $pending_fields[] = $field_label . ' (' . $field_id . ')'; } elseif (!$is_visible) { $debug_info['status'] = 'skipped_hidden'; } else { $debug_info['status'] = 'completed'; } $debug_fields[] = $debug_info; } } // Pass debug info to JavaScript (always, even when no pending fields) wp_localize_script($this->plugin_name, 'userspn_validation_debug', [ 'enabled' => true, 'has_pending' => $has_pending, 'pending_count' => count($pending_fields), 'pending_fields' => $pending_fields, 'all_fields' => $debug_fields, ]); // Enqueue debug script wp_enqueue_script($this->plugin_name . '-validation-debug', USERSPN_URL . 'assets/js/userspn-validation-debug.js', ['jquery', $this->plugin_name], $this->version, false); if ($has_pending) { wp_enqueue_script($this->plugin_name . '-profile-fields-validation', USERSPN_URL . 'assets/js/userspn-profile-fields-validation.js', ['jquery', $this->plugin_name . '-popups', $this->plugin_name], $this->version, false); }