誰もが管理メニューの区切り記号を追加する方法を知っていますか?私は見つけました これ しかしそれは助けにはなりませんでした。
何か案は?
ここにあなたが欲しいものを手に入れるための迅速で汚い方法があります。
WordPressは管理メニューセクションを$menu
というグローバル配列に格納します。区切り文字を追加するには、分離したいオプションのインデックス間にあるインデックスを使用して、$menu
配列に要素を追加します。
add_admin_menu_separator()
関数を使うそのため、このロジックをカプセル化する関数をadd_admin_menu_separator()
と書きました。セパレータを追加したいオプションその後よりも大きい配列インデックス番号を選択してから、そのインデックスをパラメータとして渡して関数add_admin_menu_separator()
を呼び出す必要があります。
例えば:
add_admin_menu_separator(37);
add_admin_menu_separator()
関数自体これがあなたのテーマのfunctions.php
ファイルにコピーできる関数add_admin_menu_separator()
の定義です。はい、それは難解ですが、グローバル$menu
配列を作成して使用するコードもそうです。 (計画的には、ありがたいことに、最終的には廃止予定ですが、おそらく数年後になるでしょう)
function add_admin_menu_separator($position) {
global $menu;
$index = 0;
foreach($menu as $offset => $section) {
if (substr($section[2],0,9)=='separator')
$index++;
if ($offset>=$position) {
$menu[$position] = array('','read',"separator{$index}",'','wp-menu-separator');
break;
}
}
ksort( $menu );
}
$menu
へのインデックスを見つけるどのインデックス番号が必要かを判断するために、$GLOBALS['menu']
フック内からadmin_init
のvar_dump()
を実行できます。これは、値を確認するために一時的にテーマのfunctions.php
ファイルに追加できるコードです。これは/wp-admin/
で始まるURLを要求するときにのみ機能します。ただし、少なくともテーマのFTPアクセスを取得するまでは、内蔵のテーマエディタではなくFTPを使用してください。 functions.php
ファイル!):
add_action('admin_init','dump_admin_menu');
function dump_admin_menu() {
if (is_admin()) {
header('Content-Type:text/plain');
var_dump($GLOBALS['menu']);
exit;
}
}
ところで、あなたは管理者メニューを扱うために一般的にこれらのリンクが役に立つと思うかもしれません:
私の管理者メニュークラスは現在セパレーターを追加する簡単な方法を提供していませんが、私は時間があるとき私は今それを追加すると思います。
それは簡単です:
add_action( 'admin_init', 'add_sep' );
function add_sep() {
if ( ! is_admin() )
return false;
global $menu;
$sep = $menu[4]; // that's the default separator
$pos = 6; // change it for the desired position
$menu = array_merge(
array_slice( $menu, 0, $pos ),
array( $sep ),
array_slice( $menu, $pos + 1, -1)
);
$menu[ $pos - 1 ][4] .= ' menu-top-last';
$menu[ $pos + 1 ][4] .= ' menu-top-first';
}
注:デフォルトの区切り文字の位置($menu[4]
)は、このフックの前にあなた(またはあなたのプラグイン)がどの設定をしたかによって異なります。
もちろん、menu-top-first
とmenu-top-last
クラスのイントロスペクションを微調整することもできます。
セパレータが追加されないという問題がいくつかありましたが、それはwordpressが重複するセパレータを削除する方法が原因でした。関数の最後にksort($menu);
を追加することで問題は解決しました。
これはMastaBabaの答えに基づいていますが、あなたが指定した位置で何かを置き換えることはありません - それは後でセパレータを追加するだけです。
無名関数も使用するので、PHPバージョン5.3以降とのみ互換性があります。
add_action( 'admin_menu', function () {
$position = 29;
global $menu;
$separator = [
0 => '',
1 => 'read',
2 => 'separator' . $position,
3 => '',
4 => 'wp-menu-separator'
];
if (isset($menu[$position])) {
$menu = array_splice($menu, $position, 0, $separator);
} else {
$menu[$position] = $separator;
}
});
以下は、管理メニューが表示されたときに実行されるWordpressのアクションです。管理者メニューは配列であり、あなたがしているのはここで、あなたが指定した位置にセパレータを定義する配列要素を追加することです。
ここから :
add_action( 'admin_menu', 'set_admin_menu_separator' );
function set_admin_menu_separator() {
$position = 79;
global $menu;
$menu[$position] = array(
0 => '',
1 => 'read',
2 => 'separator' . $position,
3 => '',
4 => 'wp-menu-separator'
);
}
これは現在受け入れられている答えにかなり似ていますが、現在受け入れられている答えは私にとってはうまくいきませんでした(そして、コメントから判断すると、他のいくつかのものに対して)。
何をしようとしているのか判断するのは少し難しいですが、WordPressの管理メニューにトップレベルのエントリを追加しようとしていると思います。
WordPress Codexの このドキュメント を参照してください。
要するに、あなたはadd_menu_page()
関数の使用法を探しています。それはいくつかの引数を取り、 "Dashboard"、 "Posts"、 "Media"などの兄弟として管理メニューに追加項目を表示します.
うまくいったことを願っています。 :-)