web-dev-qa-db-fra.com

La case à cocher de la page d'options personnalisées ne sera pas enregistrée, bien que le texte soit utilisé

Voici mon code:

add_action('admin_menu', 'test_plugin_setup_menu');                                                                                                     /**/
function test_plugin_setup_menu(){                                                                                                                      /**/
        add_submenu_page('options-general.php','Forhandler options side','Forhandler Options', 'manage_options', 'mine-første-options', 'test_init');   /**/
}                                                                                                                                                       /**/
function test_init(){                                                                                                                                   /**/
        //echo "<h1>Hello World!</h1>";
        ?>
        <div>
        <h1>Codehero Dealers</h1>
        <form action="options.php" method="post">
        <?php settings_fields('mine_plugin_options'); ?>
        <?php do_settings_sections('mine-første-options'); ?>

        <input name="Submit" type="submit" value="<?php esc_attr_e('Save Changes'); ?>" />
        </form>
        </div>
        <?php
}
function mine_plugin_section_text() {
    echo '<p>Her Finder du indstillinger til forhandler delen.</p>';
}
// add the admin settings and such
add_action('admin_init', 'mine_plugin_admin_init');
function mine_plugin_admin_init(){
register_setting( 'mine_plugin_options', 'mine_plugin_options', 'mine_plugin_options_validate' );
add_settings_section('mine_plugin_main', 'Main Settings', 'mine_plugin_section_text', 'mine-første-options');
add_settings_field('mine_plugin_text_string', 'Forhandler checkout indstilling', 'mine_plugin_setting_string', 'mine-første-options', 'mine_plugin_main');
}


function mine_plugin_setting_string() {

$options = get_option('mine_plugin_options');
echo "<input id='plugin_checkbox' name='mine_plugin_options[plugin_checkbox]' type='checkbox' value='true' />";

}

// validate our options
function mine_plugin_options_validate($input) {
    /*
$options = get_option('mine_plugin_options');
$options['text_string'] = trim($input['text_string']);
if(!preg_match('/^[a-z0-9]{}$/i', $options['text_string'])) {
$options['text_string'] = '';
}
return $options; */
}

Il indique que les paramètres ont été enregistrés, mais que la case à cocher revient à ne plus être cliquée.

Je suis assez nouveau dans le domaine "créez vos propres options", donc toute aide serait la bienvenue. J'ai suivi ce tutoriel pour créer le code: http://ottopress.com/2009/wordpress-settings-api-tutorial/

1
Kristoffer M

Ne commentez pas votre code de validation. N'oubliez pas que vous l'utilisez pour valider les données. Par conséquent, il ne renvoie rien pour le moment.

add_action('admin_bar_menu', 'make_parent_node', 999);

function make_parent_node($wp_admin_bar) {
    $args = array(
        'id' => 'test1234', // id of the existing child node (New > Post)
        'title' => 'test', // alter the title of existing node
        'parent' => 'new-content', // set parent to false to make it a top level (parent) node
        'href' => admin_url('admin.php?page=enter_timesheet')
    );
    $wp_admin_bar->add_node($args);
}

add_action('admin_menu', 'test_plugin_setup_menu');

function test_plugin_setup_menu() { /**/
    add_submenu_page('options-general.php', 'Forhandler options side', 'Forhandler Options', 'manage_options', 'mine-første-options', 'test_init');
}

/**/

function test_init() { /**/
    //echo "<h1>Hello World!</h1>";
    ?>
    <div>
        <h1>Codehero Dealers</h1>
        <form action="options.php" method="post">
            <?php settings_fields('mine_plugin_options'); ?>
            <?php do_settings_sections('mine-første-options'); ?>

            <input name="Submit" type="submit" value="<?php esc_attr_e('Save Changes'); ?>" />
        </form>
    </div>
    <?php
}

function mine_plugin_section_text() {
    echo '<p>Her Finder du indstillinger til forhandler delen.</p>';
}

// add the admin settings and such
add_action('admin_init', 'mine_plugin_admin_init');

function mine_plugin_admin_init() {
    register_setting('mine_plugin_options', 'mine_plugin_options', 'mine_plugin_options_validate');

    add_settings_section('mine_plugin_main', 'Main Settings', 'mine_plugin_section_text', 'mine-første-options');

    add_settings_field('mine_plugin_checkbox', 'Forhandler checkout indstilling', 'mine_plugin_setting_string', 'mine-første-options', 'mine_plugin_main');

}

function mine_plugin_setting_string() {

    $options = get_option('mine_plugin_options');

    echo "<input id='mine_plugin_checkbox' name='mine_plugin_options[checkbox]' type='checkbox' value='1'" . checked( 1, $options['checkbox'], false ) . " />";
}

// validate our options
function mine_plugin_options_validate($input) {

    $newinput['checkbox'] = trim($input['checkbox']);
    return $newinput;
}

Plutôt que de lire l'option, de définir une condition et de vérifier la présence ou l'absence d'une valeur, nous pouvons utiliser la fonction WordPress checked.

1
David Lee

Il semble que vous manquiez la valeur checked="checked" de votre entrée ...

Essayez quelque chose comme ça:

$options = get_option('mine_plugin_options');
$checked = ($options == 'true' ? ' checked="checked"' : '');
echo "<input id='plugin_checkbox' name='mine_plugin_options[plugin_checkbox]' type='checkbox' value='true' {$checked} />";
0
PSD to Final