私は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
機能を使用してみましたが、同じ結果が得られました。
何がおかしいのですか?
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!';
}
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
を使うこともできますが、関数名を整理するほうがよりきれいな方法です。