設定 メニューには、次のメニュー項目があります。
Settings
-- General
-- Writing
-- Reading
-- Discussion
-- Media
-- Permalinks
-- Blogging
Blogging (options-general.php?page=blogging
)を下に並べ替えずに General の下に並べ替えたいと思います。これはadd_options_page()
関数で追加されました。
いくつかの調査から、これが私が思いついたものです。
add_filter( 'custom_menu_order', array( $this, 'submenu_order' ) );
function submenu_order( $menu_order ) {
global $submenu;
$order = array();
$order[] = $submenu['options-general.php'][10];
$order[] = $submenu['options-general.php'][41];
$submenu['options-general.php'] = $order;
return $menu_order;
}
これは動作しますが、 General および Blogging のみが表示され、残りは削除されます。
Settings
-- General
-- Blogging
また、私にとって$submenu['options-general.php'][41]
は現在インデックス位置41
です。たとえ他のプラグイン設定がリストされていても、これは他のみんなにとって同じインデックス位置になるということですか?
cjbj の助けを借りて、私は最終的な解決策を得ることができました。
add_filter( 'custom_menu_order', 'submenu_order' );
function submenu_order( $menu_order ) {
# Get submenu key location based on slug
global $submenu;
$settings = $submenu['options-general.php'];
foreach ( $settings as $key => $details ) {
if ( $details[2] == 'blogging' ) {
$index = $key;
}
}
# Set the 'Blogging' menu below 'General'
$submenu['options-general.php'][11] = $submenu['options-general.php'][$index];
unset( $submenu['options-general.php'][$index] );
# Reorder the menu based on the keys in ascending order
ksort( $submenu['options-general.php'] );
# Return the new submenu order
return $menu_order;
}
あなたが直接グローバル変数を操作しているならば、あなたが得る結果は驚くべきことではありません。 $submenu
をキー10と41の項目だけに置き換えます。この方法に従う場合は、これを行う必要があります(キー11には何もないと仮定します)。
$submenu['options-general.php'][11] = $submenu['options-general.php'][41];
unset ($submenu['options-general.php'][41]);
ただし、フィルタ機能は一切使用していません。フィルタを通過している$menu_order
には何も起こりません。だから、これは非常にきれいな解決策になることはできません。
ご存知のとおり、 add_submenu_page
は、関数が呼び出される順序で、配列の最後に新しいサブメニューを追加するだけです。この行
$submenu[$parent_slug][] = array ( $menu_title, $capability, $menu_slug, $page_title );
あなたがそうする前に新しいプラグインがadd_submenu_page
を呼び出すならば、41のキーは簡単に別のものになるかもしれません。これを防ぐには、正しいキーを見つけるために$submenu
をループする必要があります。クイック 'ダーティーバージョン:
for ( $i = 1; $i <= 100; $i++ ) {
if ( array_key_exists( $submenu['options-general.php'][$i] ) ) {
if ( $submenu['options-general.php'][$i][2] == 'my-custom-slug' ) {
$the_desired_key = $i;
// [2] because that is the index of the slug in the submenu item array above
}
}
}
_ update _
後者のループのより良いバージョン:
$sub = $submenu['options-general.php'];
foreach ( $sub as $key => $details ) {
if ( $details[2] == 'my-custom-slug' ) {
$the_desired_key = $key;
}
}
このようにして$the_desired_key
を見つけたら、上記のset + unsetメソッドを安全に使うことができます。 11が未使用のオフセットであることを確認しました。