web-dev-qa-db-ja.com

編集者ロールはカスタムテーマオプションを保存できません

この問題を参照しているこのサイトにはいくつか質問があります。私はそれらを読んで提案された解決策を適用しました。

私は編集者の役割用に表示される非常に単純なテーマオプションページを作成しましたが、編集者がオプションを保存しようとすると、彼らは「Cheatin 'Uh?」を取得します。メッセージ。

以下は私のオプションコードです:

<?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
}
?>

私はまた、編集者の役割に必要な機能を付与するために、次のものを自分の関数ファイルに追加しました。

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

これに関しては、バグ(ish)レポートがあります。 http://make.wordpress.org/themes/2011/07/01/wordpress-3-2-fixing-the-edit_theme_optionsmanage_options-bug/

フィルターを使用して、テーマページの機能を変更できます。最初に、register_setting()呼び出しを次のように編集します。

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

最初のパラメーターは設定グループであり、これが機能のフィルタリング対象です。

2番目は、フィルターを追加することです。

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

それはそれを行う必要があります。

理にかなっている場合は、代わりにカスタマイザーを使用できる場合がありますが、エディターがそれを私の頭上で使用できるかどうかはわかりません。

3
sanchothefat

この プラグイン が役に立つかもしれません。役割およびこれらの役割の機能を編集、作成、および削除できます。

1
neil.odiaz