web-dev-qa-db-fra.com

API de paramètres - modification de la sortie de add_settings_field ()?

J'utilise Paramètres API et je me demande s'il est possible de modifier la sortie par défaut de add_settings_field () function?

add_settings_field('the_field', 'bar', 'foo', 'page', 'section');      

function foo() {
    echo 'foo';
}

Les sorties:

<table class="form-table">
  <tr valign="top">
    <th scope="row">bar</th>
    <td>foo</td>
    </tr>

Comment se débarrasser de ces balises de table et les remplacer par autre chose?

5
Wordpressor

Si vous examinez do_settings_fields() (ligne 1125, /wp-admin/includes/template.php), vous pouvez voir que les informations de la table sont codées en dur dans l’API des paramètres. Si vous ne souhaitez pas utiliser le tableau, vous devrez développer vos propres fonctions de paramètres.

5
mor7ifer

Ma fonction personnalisée pour cela:

/**
 * Prints out one specified field from settings section.
 *
 * Based on:
 * @see do_settings_sections
 * 
 * @global array $wp_settings_sections  Storage array of all settings sections added to admin pages
 * @global array $wp_settings_fields    Storage array of settings fields and info about their pages/sections
 *
 * @param string $page                  The slug name of the page whose settings sections you want to output
 * @param string $field_id              Field ID for output
 */
public static function do_settings_section_field($page, $field_id) {
    global $wp_settings_sections, $wp_settings_fields;

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

    foreach ( (array) $wp_settings_sections[$page] as $section ) {

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

        if ( ! isset( $wp_settings_fields[$page][$section['id']] ) )
            continue;

        foreach ( (array) $wp_settings_fields[$page][$section['id']] as $field ) {
            if ( $field['id'] !== $field_id )
                continue;

            call_user_func($field['callback'], $field['args']);
        }
    }
}

Vous pouvez utiliser cette fonction à la place de do_settings_sections(), avec les mêmes premiers arguments et le même identifiant de champ pour le rendu en tant que second argument.

0
NewEXE