web-dev-qa-db-ja.com

add_menu_page権限 - 何が間違っているのですか?

私はWordpress 3.3.2のフレッシュインストールを実行していて、有効になっている唯一のプラグインは私が開発しているものですが、私はadd_menu_pageのパーミッション問題を乗り越えることができないようです。名前付き関数の代わりに無名関数を使うことを除いて、私は ドキュメンテーション にほぼ正確に従っています。

私のプラグインのソース:

<?php
/*
Plugin Name: Some Plugin
*/

add_action('admin_init', function() {
    add_menu_page('Some Page', 'Some Page', 'manage_options', 'some-slug', function() {
        echo 'Hello, world!';
    });
});

?>

メニューのリンクはメニューの一番下にうまく表示されますが、「Hello、world!」の代わりに、次のように表示されます。

このページにアクセスするための十分な権限がありません。

manage_optionsの代わりにadministrator機能を使用してみましたが、同じ結果が得られました。

何がおかしいのですか?

5
Kevin

admin_menuではなく、admin_initフックが必要です。

また、無名関数を使うべきではありません。代わりに、

function wpse51004_add_menu_page() {
    add_menu_page('Some Page', 'Some Page', 'manage_options', 'some-slug', 'wpse51004_some_page_callback');
};
add_action('admin_menu', 'wpse51004_add_menu_page');

function wpse51004_some_page_callback() {
        echo 'Hello, world!';
    }
13
Stephen Harris

admin_menuではなくadmin_initを使用しなければならない、それがあなたがエラーを受けている理由です。

my_plugin_add_menu_page(){
    add_menu_page('Some Page', 'Some Page', 'manage_options', 'some-slug', 'my_plugin_some_page_callback');
}
add_action('admin_menu', 'my_plugin_some_page_callback');

function my_plugin_some_page_callback() {
    echo 'Hello, world!';
}

匿名のfunctionを使うこともできますが、関数名を整理するほうがよりきれいな方法です。

0
hsn0331