'', 'type' => $this->type, 'label' => $this->label, 'name' => '', 'placeholder' => '', 'description' => '', 'required' => '0', 'css_class' => '', 'width' => 'full', // Bedingte Logik 'conditional_logic' => '0', 'conditional_action' => 'show', // show|hide 'conditional_rules' => array(), // [{field,operator,value}] 'conditional_match' => 'all', // all|any // Schritt (mehrstufige Formulare) 'step' => 0, ); } abstract public function render( $field, $value = '' ); public function validate( $value, $field ) { if ( ! empty( $field['required'] ) && $field['required'] === '1' ) { $empty = ( $value === '' || $value === null || $value === array() ); if ( $empty ) return sprintf( 'Das Feld „%s" ist ein Pflichtfeld.', $field['label'] ); } return true; } public function sanitize( $value, $field ) { return sanitize_text_field( (string) $value ); } /* Einstellungs-Panel im Builder */ public function settings_panel( $field ) { ?>

'','operator'=>'=','value'=>'')); foreach($rules as $rule): ?>
type ); $w = $field['width'] ?? 'full'; if ( $w !== 'full' ) $cls[] = 'wmf-field-width-' . $w; if ( ! empty($field['css_class']) ) $cls[] = $field['css_class']; if ( !empty($field['required']) && $field['required']==='1' ) $cls[] = 'wmf-required'; if ( !empty($field['conditional_logic']) && $field['conditional_logic']==='1' ) $cls[] = 'wmf-has-condition'; return implode(' ', $cls); } protected function render_label( $field ) { if ( empty($field['label']) ) return; $req = (!empty($field['required']) && $field['required']==='1') ? ' ' : ''; printf( '', esc_attr($field['id']), esc_html($field['label']), $req ); } protected function render_description( $field ) { if ( empty($field['description']) ) return; printf( '

%s

', esc_html($field['description']) ); } protected function conditional_attrs( $field ) { if ( empty($field['conditional_logic']) || $field['conditional_logic'] !== '1' ) return ''; return sprintf( ' data-condition="%s" data-condition-action="%s" data-condition-match="%s" data-condition-rules="%s"', '1', esc_attr($field['conditional_action'] ?? 'show'), esc_attr($field['conditional_match'] ?? 'all'), esc_attr(wp_json_encode($field['conditional_rules'] ?? array())) ); } }