Coding | PHP | Settings API | WordPress

WordPress Settings API ohne Tabellen verwenden

gardening 1493896 1920

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.

weiter schmökern

Schreibe einen Kommentar

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden.

Deine E-Mail-Adresse wird nicht veröffentlicht.