カテゴリー専用の投稿一覧と新規投稿メニューを追加する

カテゴリー専用の投稿一覧と新規投稿メニューを追加する - サイト更新のひと手間を軽減する

説明

サイト更新の1クリックを省くため、特定カテゴリーの投稿に対して同じようにメニューを追加してみた。カスタム投稿タイプの専用投稿メニューみたいな感じである。
「投稿」メニューに追加する

サブメニューの追加は、admin_menuアクションでadd_posts_pageを使用する。

<?php
add_action( 'admin_menu', 'mytheme_menu' );
function mytheme_menu() {
	$cat_id = get_cat_ID( 'ニュース' );
	add_posts_page( 'ニュース一覧', 'ニュース一覧', 'publish_posts', "edit.php?cat=$cat_id" );
	add_posts_page( 'ニュース投稿', 'ニュース投稿', 'publish_posts', "post-new.php?cat=$cat_id" );
}
?>

この例では、「投稿」メニューのサブメニューとして「ニュース一覧」と「ニュース投稿」を追加している。
「ニュース一覧」は「投稿一覧(edit.php)」をそのまま利用しており、catパラメータにカテゴリーIDを追加することでフィルター機能が有効になり、意図している基本的な振る舞いをしてくれる。「ニュース投稿」は「新規追加(post-new.php)」を利用し、「ニュース一覧」と同じようにcatパラメータを追加している。ただ、「新規追加」にはcatパラメータが追加されても何も行わないため、自動的にカテゴリーをチェックするといった補助的な機能はjQueryを使うことにした。

jQueryで調整する

jQueryで処理を行う場合は、admin_footerアクションを使用する。グローバル変数の$pagenowにはWordPressの管理ページのファイル名が格納されているので、ここでは目的のページのみでadmin_footerアクションを追加している。

<?php
global $pagenow;
if ( in_array( $pagenow, array( 'edit.php', 'post-new.php' ) ) ) {
	add_action( 'admin_footer', 'mytheme_admin_footer' );
}
function mytheme_admin_footer() {
?<
<script type="text/javascript">
//<![CDATA[
jQuery(document).ready( function() {
	// URLからcatパラメータの値を取得
	var cat = '';
	var term = window.locaution.href.slice( window.locaution.href.indexOf( '?' )+1 ).split( '&' );
	for ( var i = 0; i < term.length; i++ ) {
		query = term[i].split( '=' );
		if ( query[0] == 'cat' ) {
			cat = query[1];
			break;
		}
	}
	if ( cat != '' ) {
		// カレントメニューの切り替え
		var uri = window.locaution.href.split( '/' );
		jQuery( '.wp-submenu-wrap li.current' ).removeClass( 'current' ).find( 'a.current' ).removeClass( 'current' );
		jQuery( '.wp-submenu-wrap li a[href="'+uri[uri.length-1]+'"]' ).addClass( 'current' ).parent().addClass( 'current' );
		// 一覧
		jQuery( '#wpbody-content a[href="post-new.php"]' ).attr( 'href', 'post-new.php?cat='+cat );
		// 新規投稿
		jQuery( '#in-category-'+cat ).attr( 'checked', 'checked' );
	}
} );
//]]>
</script>
<?php
}
?>

ここでやっていることは、リクエストされたURLからcatパラメータの値を取得し、値があった場合のみ、次の処理を行っている。

  • ・カレントメニューの切り替える
  • ・一覧ページの見出し横の「新規追加」のリンク先にcatパラメータを追加
  • ・新規投稿ページのカテゴリーをチェック済みにする

カレントメニューの切り替えは、add_posts_page関数でサブメニューを追加しただけだと、「ニュース一覧」ページを表示しても「投稿一覧」が「ニュース投稿」ページを表示しても「新規追加」がカレントメニューとして黒く表示されてしまうため、このような対応を行っている。

今回は最低限の対応しかしていないが、見出しの書き換え、フォーム(ウィジェット)の追加など、投稿ページをカスタマイズしたい要素は他にもある。この記事が使いやすい管理ページを構築するヒントになれば幸いである。

関連

お勧めコンテンツ

load_plugin_textdomain(2010年6月15日 登録)

bool load_plugin_textdomain( string $domain [ , mixed $abs_rel_path = false [ , mixed $plugin_rel_path = false ] ] )
プラグイン用の国際化用ファイル(MOファイル)をロードする。

get_header(2009年11月12日 登録)

void get_header( [ string $name = null ] )
ヘッダパーツを記述したメインヘッダファイルheader.php(またはサブヘッダファイルheader-???.php)を読み込む。

sanitize_hex_color(2012年6月14日 登録)

string sanitize_hex_color( $color )
'#'のついた16進数のカラー値をサニタイズする。

the_category(2009年11月12日 登録)

void the_category ( [ string $separator = '' [ , string $parents = '' [ , mixed $post_id = false ] ] ] )
投稿データのカテゴリーをリンク付きで表示する。

get_template_part(2010年6月7日 登録)

void get_template_part( string $slug [ , string $name = null ] )
任意のテンプレートファイルを読み込む(表示する)。

最終更新日時 : 2012-01-23 21:25