WordPress Settings API ohne Tabellen verwenden

gardening 1493896 1920
Bildquelle: Pixabay, igna1973

Gerne habe ich früher nach Lösungen für WordPress-Fragen gegoogelt. Allerdings kam ich irgendwann drauf, dass die Antworten auf meine Fragen über WordPress selbst manchmal schneller zu klären sind. Ein Beispiel habe ich heute beim Ausmisten meiner Backup-Archive wieder ausgegraben.

Zumindest den Output der WordPress-Settings-API über die Standardtemplates von WordPress finde ich nicht mehr ganz zeitgemäß. Man bekommt für jedes Feld das man registriert, eine Tabellenzeile (oben drüber ist dann natürlich eine Tabelle). Statt die Funktion do_settings_sections in wp-admin/includes/template.php zu verwenden, diese einfach durch eine eigene Funktion ersetzen.

Ein beliebig adaptierbares Beispiel

function flxo_settings_sections( $page ) {
    global $wp_settings_sections, $wp_settings_fields;

    if ( ! isset( $wp_settings_sections[$page] ) )
        return;

    foreach ( (array) $wp_settings_sections[$page] as $section ) {
        if ( $section['title'] )
            echo "<h2>{$section['title']}</h2>\n";

        if ( $section['callback'] )
            call_user_func( $section['callback'], $section );

        if ( ! isset( $wp_settings_fields ) || !isset( $wp_settings_fields[$page] ) || !isset( $wp_settings_fields[$page][$section['id']] ) )
            continue;
      //  $this->flxo_settings_fields( $page, $section['id'] ); in einer klasse
        pptf_settings_fields( $page, $section['id'] );
    }
}

Über add_settings_field(); können auch neue Argumente eingebracht und im Template dann verwendet werden.

function flxo_settings_fields($page, $section) {
    global $wp_settings_fields;

    if ( ! isset( $wp_settings_fields[$page][$section] ) )
        return;

    foreach ( (array) $wp_settings_fields[$page][$section] as $field ) {
        $class = '';

        if ( ! empty( $field['args']['class'] ) ) {
            $class = ' class="setting ' . esc_attr( $field['args']['class'] ) . '"';
        }
   
        echo "<div{$class}>";

        if ( ! empty( $field['args']['label_for'] ) ) {
            echo '<label for="' . esc_attr( $field['args']['label_for'] ) . '">' . $field['title'] . '</label><br />';
        } else {
            echo $field['title'];
        }

        call_user_func($field['callback'], $field['args']);
        echo '</div>';
    }
}

statt do_settings_sections wird die eigene Funktion flxo_settings_section verwendet. Sie ruft dann flxo_settings_fields als Ersatzfunktion für do_settings_fields auf.

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden. Die Angabe einer E-Mail-Adresse und eines Namens ist nicht erforderlich. Einen (Spitz)-Namen zu nennen wäre aber doch nett.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Hinweis: Sowohl angegebener Name als auch E-Mail-Adresse (beides ist optional, dafür werden alle Kommentare vor Veröffentlichung geprüft) werden dauerhaft gespeichert. Du kannst jeder Zeit die Löschung Deiner Daten oder / und Kommentare einfordern, direkt über dieses Formular (wird nicht veröffentlicht, und im Anschluss gelöscht), und ich werde das umgehend erledigen. – Mit hinterlassenen Kommentaren hinterlegte IP-Adressen werden nach zwei Monaten automatisch gelöscht

publicly queryable