webentwicklung-frage-antwort-db.com.de

Do_settings_sections können nicht ausgegeben werden. Kann nicht verstehen warum

Ich habe diesen 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

und dies ist der inhalt in 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='' />";
}

Die Funktion settings_field der Einstellungsseite (ich kann den in meiner Quelle verborgenen Eingabetyp sehen) und die Senden-Schaltfläche, aber ich kann den do_settings_section nicht rendern und ich kann wirklich nicht verstehen, warum. Irgendwelche Vorschläge?

1
Dudo1985

Nach dem, was ich sehe, mischen Sie die Ausgabe und den Code, der diese Ausgabe vorbereiten soll. Die Vorbereitung erfolgt erst, nachdem die Ausgabe gestartet wurde. Sieht komisch aus für mich.

Hier habe ich Ihren Code aktualisiert und es funktioniert OK:

/* 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

Das Problem hier hat also eigentlich nichts damit zu tun, wie Sie Einstellungen registrieren oder ausgeben. Was ich herausfand, war ein Fehler in der Reihenfolge der Aktionen.

Versuchen Sie, eine Datei zu erstellen, die Ihren gesamten Einstellungscode enthält, und rufen Sie diese Datei mit der Aktion 'init' auf. Die von Ihnen aufgerufene Aktion 'admin_init' ist korrekt, wird jedoch nur aufgerufen, nachdem die Aktion admin_init bereits ausgeführt wurde.

0
Nick Young