'default',
'config' => '',
), $atts, 'adpf_form');
$form_id = sanitize_text_field($atts['id']);
// Get form configuration
$form_config = $this->get_form_config($form_id, $atts['config']);
if (empty($form_config) || !isset($form_config['fields'])) {
return '
' . esc_html__('Form configuration not found.', 'ad-pro-forms') . '
';
}
// Store config for this form instance (for dynamic CSS)
if (!isset($this->form_configs[$form_id])) {
$this->form_configs[$form_id] = $form_config;
}
// If config was provided via shortcode attribute, register it temporarily for this request
// so form handler can access it
if (!empty($atts['config'])) {
add_filter('adpf_form_config_' . $form_id, function() use ($form_config) {
return $form_config;
}, 999);
}
// Track that this form is rendered (for asset loading)
if (!in_array($form_id, $this->forms_rendered)) {
$this->forms_rendered[] = $form_id;
}
// Get settings, merging label_position from styling settings
$settings = ADPF_Settings::get_settings();
$styling = ADPF_Styling::get_settings();
$settings['label_position'] = $styling['label_position'];
// Start output buffering
ob_start();
?>