web-dev-qa-db-fra.com

Le rôle de l'éditeur n'enregistre pas la page de paramètres pour le type de publication personnalisé

J'ai actuellement un type d'article personnalisé avec une page de sous-menu via add_submenu_page. Sur cette page, j'ai un formulaire avec certains paramètres de base tels qu'un éditeur de texte et des boutons radio.

function programme_enable_pages() {
    add_submenu_page(
        'edit.php?post_type=programmes',
        'content',
        'Archive content',
        'edit_pages',
        basename(__FILE__),
        'archiveContent'
    );
}
add_action( 'admin_menu', 'programme_enable_pages' );

function register_programme_settings() {
    register_setting( 'programme_content', 'programme_content' );
    register_setting( 'programme_content', 'programme_branding' );
}
add_action( 'admin_init', 'register_programme_settings' );

function archiveContent() { ?>
<div class="wrap">

    <form method="post" action="options.php">
        <?php
        settings_fields( 'programme_content' ); 
        do_settings_sections( 'programme_content' );

        wp_editor(
            get_option( 'programme_content' ),
            'programme_content',
            $settings = array(
                'textarea_name' => 'programme_content'
            )
        ); ?>

        <label><b>Branding options</b></label><br>
        <input type="radio" name="programme_branding" id="branding_blue" value="blueBranding" <?php checked('blueBranding', get_option('programme_branding'), true); ?> checked="checked">Blue Branding<br>
        <input type="radio" name="programme_branding" id="branding_red" value="redBranding" <?php checked('redBranding', get_option('programme_branding'), true); ?>/>Red Branding<br>
        <input type="radio" name="programme_branding" id="branding_orange" value="orangeBranding" <?php checked('orangeBranding', get_option('programme_branding'), true); ?>/>Orange Branding

        <?php submit_button(); ?>   
    </form>     
</div>
<?php }

Lorsqu'un utilisateur avec un rôle d'administrateur modifie le contenu et enregistre les modifications, le contenu est enregistré sans problème. Mais lorsqu'un utilisateur avec un rôle d'éditeur enregistre les modifications, celles-ci sont dirigées vers une page indiquant:

Désolé, vous n'êtes pas autorisé à gérer ces options.

Quelqu'un peut-il m'indiquer dans la bonne direction comment faire en sorte que toute personne ayant un rôle d'utilisateur d'éditeur enregistre ces options?

2
rikardo85

Dans le fichier wp-admin/options.php, vous trouvez un filtre avec un nom créé à partir de votre groupe de paramètres pour contrôler les autorisations:

$capability = apply_filters( "option_page_capability_{$option_page}", $capability );

pour résoudre le problème, ajoutez un filtre avec le niveau d'autorisation souhaité, par exemple:

add_filter( 'option_page_capability_programme_content', 'my_settings_permissions', 10, 1 );
function my_settings_permissions( $capability ) {
    return 'edit_pages';
}
3
meloniq

Pour enregistrer les options, l'utilisateur doit disposer de la capacité manage_options, ce qui manque aux éditeurs.

Votre utilisation de la fonctionnalité edit_pages pour le menu permet à la page d’administration d’être accessible aux éditeurs, mais le paramètre de soumission passe au code du gestionnaire d’options qui ne prend pas en compte le contexte de la page d’administrateur.

Comment réparer? Je dirais que personne, à l'exception d'un administrateur, ne devrait être en mesure de modifier les paramètres de l'ensemble du site. Votre approche est donc tout simplement fausse. Les options les plus constructives ne sont pas l'utilisation de l'API de paramètres, ni la gestion de la soumission du formulaire, ni l'utilisation d'un gestionnaire de rôles. type de plugin pour donner à l'utilisateur la capacité manage_option.

0
Mark Kaplun