web-dev-qa-db-fra.com

Le rôle d'éditeur ne peut pas enregistrer les options de thème personnalisées

Il y a quelques questions sur ce site qui font référence à ce problème et je les ai lues et appliqué les solutions proposées en vain.

J'ai créé une page d'options de thème très simple qui apparaît pour le rôle d'éditeur, mais lorsqu'un éditeur tente de sauvegarder les options, il reçoit le "Cheatin 'Uh?" message.

Ce qui suit est mon code d'options:

<?php
function map_register_settings() {
    add_option( 'map_zoom', '1');
    add_option( 'map_longitude', 'alpha');
    register_setting( 'default', 'map_zoom' ); 
    register_setting( 'default', 'map_longitude' ); 
    register_setting( 'default', 'map_latitude' ); 
} 
add_action( 'admin_init', 'map_register_settings' );

function map_register_options_page() {
    add_theme_page('Map Center', 'Map Center', 'edit_theme_options', 'map-options', 'map_options_page');
}
add_action('admin_menu', 'map_register_options_page');

function map_options_page() {
    ?>
<div class="wrap">
    <h2>Map Center Options</h2>
    <form method="post" action="options.php"> 
        <?php settings_fields( 'default' ); ?>
            <table class="form-table">
                <tr valign="top">
                    <th scope="row"><label for="map_zoom">Zoom Level (1 - 21):</label></th>
                    <td>
                    <input type="text" id="map_zoom" name="map_zoom" value="<?php echo get_option('map_zoom'); ?>" />
                    </td>
                </tr>
                <tr valign="top">
                    <th scope="row"><label for="map_latitude">Latitude:</label></th>
                    <td><input type="text" id="map_latitude" name="map_latitude" value="<?php echo get_option('map_latitude'); ?>" /></td>
                </tr>
                <tr valign="top">
                    <th scope="row"><label for="map_longitude">Longitude:</label></th>
                    <td><input type="text" id="map_longitude" name="map_longitude" value="<?php echo get_option('map_longitude'); ?>" /></td>
                </tr>
            </table>
        <?php submit_button(); ?>
    </form>
</div>
<?php
}
?>

J'ai également ajouté les éléments suivants à mon fichier de fonctions pour tenter de donner au rôle d'éditeur les capacités nécessaires:

//ALLOW EDITOR TO CHANGE MAP CENTER
 // get the the role object
   $editor = get_role('editor');
   // add $cap capability to this role object
   $editor->add_cap('edit_theme_options');
3
Ciaran Gaffey

Il y a un rapport de bug (ish) à ce sujet ici: http://make.wordpress.org/themes/2011/07/01/wordpress-3-2-fixing-the-edit_theme_optionsmanage_options-bug/

Vous pouvez utiliser un filtre pour modifier la capacité de la page de thème. D'abord, vous voudrez éditer vos appels register_setting() pour qu'ils ressemblent à ceci:

register_setting( 'map-options', 'map_zoom' ); 
register_setting( 'map-options', 'map_longitude' ); 
register_setting( 'map-options', 'map_latitude' ); 

Le premier paramètre est le groupe de paramètres et c’est pourquoi nous filtrons les capacités.

Deuxièmement, ajouter le filtre:

add_filter( 'option_page_capability_map-options', 'sewp_114719_map_options_capability' );
function sewp_114719_map_options_capability( $cap ) {
    return 'edit_theme_options';
}

Ça devrait le faire.

Vous pourrez peut-être utiliser le personnalisateur à la place si cela vous semble logique, mais vous ne savez pas si les éditeurs peuvent l’utiliser par coeur.

3
sanchothefat

Ce plugin peut aider. Vous permet de modifier, créer et supprimer des rôles ainsi que des fonctionnalités pour ces rôles.

1
neil.odiaz