web-dev-qa-db-ger.com

Seite "Admin-Optionen". Als Array speichern

Ich bin nicht so gut mit PHP. Ich habe gerade eine WordPress-Admin-Optionsseite erstellt und es funktioniert OK:

// 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;
}

Dies erstellt zwei Zeilen in der Datenbank und ich kann die Werte wie folgt anzeigen:

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

Welche Änderungen muss ich an diesem Code vornehmen, damit er als Array in einer Zeile in der Datenbank gespeichert wird? So kann ich mir dann die Werte etwa so anzeigen lassen:

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

Jede Hilfe dankbar.

1
Andy

Sie müssen nur eine Einstellung registrieren und dann Ihre Formulareingaben ändern, um die Werte in einem Array zu speichern. Hier ist ein Beispiel für die Registrierung der Einstellung:

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

$mytheme_settings = get_option( 'mytheme_settings' );

und das Feld Markup:

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

Sie müssen auch Ihre Bereinigungsfunktionen kombinieren und sie so ändern, dass sie mit den Werten im neuen Array funktionieren.

2
Dylan