web-dev-qa-db-fra.com

Impossible de générer do_settings_sections. Je ne comprends pas pourquoi

J'ai ce code:

/* Hook to admin_menu the yasr_add_pages function above */
add_action('admin_menu', 'yasr_add_pages');

function yasr_add_pages() {

    //Add Settings Page
    add_options_page( 
                    'Yet Another Stars Rating: Settings',               //Page Title
                    __('Yet Another Stars Rating: Settings', 'yasr'),   //Menu Title
                    'manage_options',                                   //capablity
                    'yasr_settings_page',                               //menu slug
                    'yasr_settings_page_content'                        //The function to be called to output the content for this page.
                    ); 

}

/* Settings Page Content */
function yasr_settings_page_content() {
    if ( !current_user_can( 'manage_options' ) )  {
        wp_die( __( 'You do not have sufficient permissions to access this page.', 'yasr' ) );
    }
    include (YASR_ABSOLUTE_PATH . '/yasr-settings-page.php');

} //End yasr_settings_page_content

et, voici le contenu de yasr-settings-page:

<div class="wrap">
    <h2>Settings API Demo</h2>
    <form action="options.php" method="post">
        <?php 
            settings_fields( 'yasr_multi_form' ); 
            do_settings_sections( 'yasr_settings_page' );
            submit_button( 'Salva' );
        ?>
    </form>
</div>

<?php

add_action( 'admin_init', 'yasr_multi_form_init' );

function yasr_multi_form_init() {
    register_setting ( 
                'yasr_multi_form', // A settings group name. Must exist prior to the register_setting call. This must match the group name in settings_fields()
                'yasr_multi_form_data' //The name of an option to sanitize and save. 
    );

add_settings_section( 'yasr_section_id', 'Gestione Multi Set', 'yasr_section_callback', 'yasr_settings_page' );
add_settings_field( 'yasr_field_name_id', 'Nome Set', 'yasr_nome_callback', 'yasr_settings_page', 'yasr_section_id' );
}

function yasr_section_callback() {
    echo "Descrizione sezione";
}

function yasr_nome_callback() {
    $option = get_option( 'yasr_multi_form_data' );
    $name = esc_attr( $option['name'] );
    echo "<input type='text' name='yasr_multi_form_data[name]' value='' />";
}

La fonction de sortie de la page de paramètres settings_field (je peux voir le type d'entrée masqué sur ma source) et le bouton d'envoi, mais je ne peux pas restituer le do_settings_section et je ne comprends vraiment pas pourquoi. Aucune suggestion?

1
Dudo1985

D'après ce que je vois, vous mélangez la sortie et le code, qui est destiné à préparer cette sortie. De plus, la préparation arrive après le début de la sortie. Ça me semble bizarre.

Ici, j'ai mis à jour votre code, et cela fonctionne bien:

/* Hook to admin_menu the yasr_add_pages function above */
add_action( 'admin_menu', 'yasr_add_pages' );

function yasr_add_pages() {

    //Add Settings Page
    add_options_page(
        'Yet Another Stars Rating: Settings', //Page Title
        __( 'Yet Another Stars Rating: Settings', 'yasr' ), //Menu Title
        'manage_options', //capability
        'yasr_settings_page', //menu slug
        'yasr_settings_page_content' //The function to be called to output the content for this page.
    );

}

add_action( 'admin_init', 'yasr_multi_form_init' );

function yasr_multi_form_init() {
    register_setting(
        'yasr_multi_form', // A settings group name. Must exist prior to the register_setting call. This must match the group name in settings_fields()
        'yasr_multi_form_data' //The name of an option to sanitize and save.
    );

    add_settings_section( 'yasr_section_id', 'Gestione Multi Set', 'yasr_section_callback', 'yasr_settings_page' );
    add_settings_field( 'yasr_field_name_id', 'Nome Set', 'yasr_nome_callback', 'yasr_settings_page', 'yasr_section_id' );
}

function yasr_section_callback() {
    echo "Descrizione sezione";
}

function yasr_nome_callback() {
    $option = get_option( 'yasr_multi_form_data' );
    $name   = esc_attr( $option['name'] );
    echo "<input type='text' name='yasr_multi_form_data[name]' value='' />";
}

/* Settings Page Content */
function yasr_settings_page_content() {
    if ( ! current_user_can( 'manage_options' ) ) {
        wp_die( __( 'You do not have sufficient permissions to access this page.', 'yasr' ) );
    }
    ?>
    <div class="wrap">
        <h2>Settings API Demo</h2>

        <form action="options.php" method="post">
            <?php
            settings_fields( 'yasr_multi_form' );
            do_settings_sections( 'yasr_settings_page' );
            submit_button( 'Salva' );
            ?>
        </form>
    </div>

<?php
} //End yasr_settings_page_content

enter image description here

2
tivnet

Le problème ici n’a donc rien à voir avec la façon dont vous enregistrez ou modifiez les paramètres. Ce que j’ai trouvé, c’était une erreur dans l’ordre des actions.

Essayez de créer un fichier contenant tout votre code de paramètres et appelez-le avec une action "init". L'action 'admin_init' que vous appelez est correcte, mais c'est simplement qu'elle est appelée après que admin_init a déjà été exécuté.

0
Nick Young