[管理]メニューの下に3つの分類法を持つカスタム投稿タイプ[ジョブ]があります。
分類法の1つにステータスがあります。これはアクティブまたはクローズです。 Active JobsのJobsの下にメニュー項目が必要です。このコードで作成しました
add_submenu_page(
'edit.php?post_type=jobs',
'Active Jobs',
'Active Jobs',
'manage_options',
'edit.php?post_type=jobs&jobstatus=67'
);
Active JobsメニューオプションがアクティブなときにJobsメニュー項目がハイライトされたままであることを除いて、これは完全に機能します。スクリーンショットを見る
私はこの記事を読みました アドミンメニューの現在のクラスadd_submenu_page()を使って 最初のパラメータとして親スラグを含めないように。スラッグを削除したときにサブメニューが正しいナビゲーションセクションに表示されるようにする方法がわかりません。
現時点では、コールバック関数を使用していません。表示される投稿をフィルタ処理するクエリパラメータを除いて、単純にデフォルトのJobsサブメニューオプションと同じURLを実行しています。これをコールバック関数に移動しても問題が解決する場合は、それを実行できます。しかし、コールバック関数に何を入れるべきかわかりません。標準のカスタム投稿タイプの編集ページを表示したいのですが、分類フィルターを配置しただけです。助けてくれてありがとう
この作業は、投稿メニューとドラフトステータスを使用して行いました。それはリストアイテムクラスを変更するためにjQueryに依存します。あなたの投稿タイプとURLに合わせて作業してください。
これが結果です。
add_action( 'admin_menu', 'wpse_44270_menu_admin' );
add_action( 'admin_head-edit.php', 'wpse_44270_highlight_menu_item' );
function wpse_44270_menu_admin()
{
add_submenu_page(
'edit.php',
'Drafts',
'<span id="my-draft-posts">Drafts</span>',
'edit_pages',
'edit.php?post_status=draft&post_type=post'
);
}
function wpse_44270_highlight_menu_item()
{
global $current_screen;
// Not our post type, exit earlier
if( 'post' != $current_screen->post_type )
return;
if( isset( $_GET['post_status'] ) && 'draft' == $_GET['post_status'] )
{
?>
<script type="text/javascript">
jQuery(document).ready( function($)
{
var reference = $('#my-draft-posts').parent().parent();
// add highlighting to our custom submenu
reference.addClass('current');
//remove higlighting from the default menu
reference.parent().find('li:first').removeClass('current');
});
</script>
<?php
}
}
これが私が思いついた解決策で、jQueryを使わない。
parent_file
には、メニューを出力する直前に実行されるフィルタwp-admin/menu-header.php
があります。インラインコメントは言う:
プラグインがサブメニュータブを動かすために。
これはグローバル変数$parent_file
に対する単なるフィルタであり、それが何をするのかよくわかりませんが、代わりにこのフィルタを使用してグローバル変数$submenu_file
を変更し、ハイライトされたサブメニューを設定します。だからこれはあなたの場合の解決策になります:
add_filter('parent_file', 'wpse44270_parent_file');
function wpse44270_parent_file($parent_file){
global $submenu_file;
if (isset($_GET['jobstatus']) && $_GET['jobstatus'] == 67) $submenu_file = 'edit.php?post_type=jobs&jobstatus=67';
return $parent_file;
}
あなたはどんなURLフォーマットでこれを適応させるかもしれません。たとえば、プラグインのサブメニューにadmin.php?page=my_plugin_slug&action=myaction
という形式を使用しているので、これを使用してサブメニューを強調表示します。
add_filter('parent_file', 'wpse44270_1_parent_file');
function wpse44270_1_parent_file($parent_file){
global $submenu_file;
if (isset($_GET['page']) && isset($_GET['action'])) $submenu_file = $_GET['page'] . '&action=' . $_GET['action'];
return $parent_file;
}
シモンズ:私はまたadmin_menu
を設定するために$submenu_file
アクションを試みました、そしてそれは私の場合(カスタムプラグインページ/ slug)でうまくいきましたがedit.php
サブメニュー(あなたの場合)のために働きませんでした。だから私は後で実行する別のアクション/フィルタを検索しましたが、それはフィルタparent_file
でした。
私はあなたがあなたのリンクにもHTMLエンティティを使う必要があることを知りました。あなたが持っているので
add_submenu_page(
'edit.php?post_type=jobs',
'Active Jobs',
'Active Jobs',
'manage_options',
'edit.php?post_type=jobs&jobstatus=67'
);
アンパサンドをHTMLエンティティと同等のものに変更してみてください。
&
だからあなたは持っているでしょう
add_submenu_page(
'edit.php?post_type=jobs',
'Active Jobs',
'Active Jobs',
'manage_options',
'edit.php?post_type=jobs&jobstatus=67'
);
これは私のために働いた...私もサブメニューと親メニューのための出力文字列をテストし、それらが一致するかどうかチェックした。これをチェックするためのちょっとしたユーティリティ関数になるでしょう
add_filter( 'parent_file', 'test_taxonomy_highlight' );
function test_taxonomy_highlight( $parent_file ){
global $submenu_file;
echo '<pre>', var_dump( $submenu_file, htmlentities( $submenu_file ) ), '</pre>';
echo '<pre>', var_dump( $parent_file, htmlentities( $parent_file ) ), '</pre>';
return $parent_file;
}