私のテーマではfunctions.php私は(これは機能のためではなく、動作するかどうかのテストとして)パラメータを持つ関数を追加しようとし、それは単に動作しません。
この codexページ で提案されているようにキューに入れられたパラメータでdo_actionを呼び出しても、パラメータは常に空になります。
function alter_item ($user, $items, $action) {
global $current_user, $menu;
get_currentuserinfo();
switch ($action) {
case false:
if ($current_user->user_login == $user) {
remove_menu_page ($items);
}
break;
case true:
if ($current_user->user_login == $user) {
remove_menu_page ($items);
}
break;
}
}
add_action( 'admin_menu', 'alter_item', 10, 3 );
do_action('alter_item', 'my-user', 'plugins.php', false);
あなたはそれを間違って使っています。
add_action
:アクションフックに関数を添付します。あなたのコードでは、あなたはalter_item
機能をadmin_menu
アクションフックに付けています。そのため、admin_menu
アクションが発生すると、alter_item
関数が実行されます。 codex によると、admin_menu
にアタッチされた関数にパラメータは渡されません。そのため、alter_item
で使用しようとしているパラメータは無効です。
do_action
:アクションフックにアタッチされているすべての関数を呼び出します。あなたのコードでは、あなたはalter_item
アクションフックにアタッチされているすべての関数を呼び出しています。 WPコアにはないため、alter_item
アクションフックはカスタムアクションフックになりますが、現在のコードにはこのアクションに関連付けられた関数は0個あり、do_action('alter_item'...
では何も起こりません。
関数をadmin_menu
にアタッチする正しい方法は、次のとおりです。
function alter_item() {
//Do whatever you want
}
//The priority argument (10 the code bellow) is optional.
add_action( 'admin_menu', 'alter_item', 10 );
カスタムアクションを定義する正しい方法:
do_action('alter_item', 'my-user', 'plugins.php', false);
それから、このようにalter_item
アクションに関数を添付することができます:
add_action( 'alter_item', 'alter_item_attached_function', 10, 3 );
function alter_item_attached_function( $user, $items, $action ) {
//Now $user, $items and $action will be 'my-user', 'plugins.php' and false
}
コアアクションに情報を渡したい場合は、次のことができます。
use
キーワードでPHP無名関数を使用してください。use
キーワードの使用例
$user = 'my-user';
$items = 'plugins.php';
$action = false;
add_action( 'admin_menu', function() use ($user, $items, $action) {
global $current_user, $menu;
get_currentuserinfo();
switch ($action) {
case false:
if ($current_user->user_login == $user) {
remove_menu_page ($items);
}
break;
case true:
if ($current_user->user_login == $user) {
remove_menu_page ($items);
}
break;
}
} );