web-dev-qa-db-fra.com

Page Options administrateur. Enregistrer en tant que tableau

Je ne suis pas bon avec PHP. Je viens de créer une page d’options d’administrateur pour WordPress et cela fonctionne bien:

// Admin Menu
add_action('admin_menu', 'my_cool_plugin_create_menu');
function my_cool_plugin_create_menu() {

    $parent_slug = 'test-slug';
    $capability = 'administrator';

    // sub menus
    add_submenu_page( $parent_slug, 'Test', 'Test', $capability, 'test', 'hp_settings_page');

    //call register settings function
    add_action( 'admin_init', 'cm_register_settings' );
}

function cm_register_settings() {

    // title
    register_setting( 
        'mytheme_group',                 // Option group 
        'mytheme_title',                 // Option name
        'admin_options_sanitize_text_1' //sanitize callback
    );

    // IDs
    register_setting( 
        'mytheme_group', 
        'mytheme_ids', 
        'admin_options_sanitize_text_2' 
    );   
}

// Admin Page
function hp_settings_page() { ?>

    <div class="wrap">

        <h2>Test</h2>

        <form method="post" action="options.php">
            <?php settings_fields( 'mytheme_group' ); ?>
            <?php do_settings_sections( 'mytheme_group' ); ?>
            <table class="form-table">                 
                <tr>
                    <th scope="row">Title</th>
                    <td>
                        <textarea name="mytheme_title" rows="10" cols="100"><?php echo get_option('mytheme_title'); ?></textarea>
                    </td>
                </tr>

                <tr>
                    <th scope="row">IDs</th>
                    <td>
                        <textarea name="mytheme_ids" rows="10" cols="100"><?php echo get_option('mytheme_ids'); ?></textarea>
                    </td>
                </tr>                   
            </table>

            <?php submit_button(); ?>

        </form>

    </div><?php 
}


// sanitize 1
function admin_options_sanitize_text_1($input) {    
    $new_input = sanitize_text_field( $input );     
    return $new_input;
}


// sanitize 2
function admin_options_sanitize_text_2($input) {    
    $new_input = preg_replace("/[^0-9\,]/", "", $input );       
    return $new_input;
}

Cela crée deux lignes dans la base de données et je peux afficher les valeurs comme ceci:

echo get_option('mytheme_ids');
echo get_option('mytheme_title');

Quelles modifications dois-je apporter à ce code pour qu'il soit enregistré dans une ligne de la base de données sous forme de tableau? Donc, je peux alors afficher les valeurs comme ceci:

$options = get_option('mytheme_options');
echo = $options['ids'];
echo = $options['title'];

Toute aide appréciée.

1
Andy

Vous devez uniquement enregistrer un paramètre, puis simplement modifier vos entrées de formulaire pour enregistrer les valeurs dans un tableau. Voici un exemple d’enregistrement du paramètre:

register_setting( 
    'mytheme_settings', 
    'mytheme_settings', 
    'admin_options_sanitize' 
);

$mytheme_settings = get_option( 'mytheme_settings' );

et le balisage de champ:

<textarea name="mytheme_settings[title]">
    <?php echo esc_textarea( $mytheme_settings['title'] ); ?>
</textarea>   

Vous aurez également besoin de combiner vos fonctions de nettoyage, en les modifiant pour qu'elles fonctionnent avec les valeurs du nouveau tableau.

2
Dylan