souyukiyaさん、こんにちは。
プラグインの有無は存じ上げませんが。。
絞り込みの機能自体は備わっているので、簡単に言うと、あとは入力フォームを追加するだけでも可能です。
投稿一覧のカテゴリー絞り込みの後には、 restrict_manage_posts というフックがあるので、ここで入力欄の表示を行います。
1点注意は、restrict_manage_postsが、メディアライブラリの一覧でも使われているため、メディアライブラリでもタグの入力欄が出ないように注意しておく必要があります。
function add_post_tag_restrict_filter() {
global $post_type;
if ( is_object_in_taxonomy( $post_type, 'post_tag' ) ) {
?>
<input name="tag" size="30" value="<?php echo esc_html( $_GET['tag'] ); ?>" />
<?php
}
}
add_action( 'restrict_manage_posts', 'add_post_tag_restrict_filter' );
一応、これでも動作はしますが、一覧内の特定のタグをクリックした際のURLのパラメータからも分かるとおり、タグのスラッグでの入力となります。
(この方が、入力方法によって、AND検索 OR検索を選択できるので、自由度が高いのですが。)
これをタグ名での入力とするには、入力されたタグ名をタグスラッグに変換する処理が必要となります。
function add_post_tag_restrict_filter() {
global $post_type;
if ( is_object_in_taxonomy( $post_type, 'post_tag' ) ) {
?>
<input name="tag_name" size="30" value="<?php echo esc_html( $_GET['tag_name'] ); ?>" />
<?php
}
}
add_action( 'restrict_manage_posts', 'add_post_tag_restrict_filter' );
function convert_tag_name2tag_slug() {
if ( ! isset( $_GET['post_type'] ) ) {
$post_type = 'post';
} elseif ( in_array( $_GET['post_type'], get_post_types( array( 'show_ui' => true ) ) ) ) {
$post_type = $_GET['post_type'];
} else {
wp_die( __('Invalid post type') );
}
if ( ! is_object_in_taxonomy( $post_type, 'post_tag' ) || ! isset( $_GET['tag_name'] ) ) {
return;
}
if ( is_array( $_GET['tag_name'] ) ) {
$_GET['tag_name'] = implode( ',', $_GET['tag_name'] );
}
$tag_name = explode( ',', $_GET['tag_name'] );
$tag_name = array_map( 'trim', $tag_name );
if ( $tag_name ) {
$tags = get_tags( 'hide_empty=0&orderby=slug' );
$tags_arr = array();
if ( $tags ) {
foreach ( $tags as $tag ) {
$tags_arr[$tag->name] = $tag->slug;
}
} else {
unset( $_GET['tag_name'] );
return;
}
$searh_tags = array();
$matched_tags = array();
foreach ( $tag_name as $t_name ) {
if ( isset( $tags_arr[$t_name] ) ) {
$searh_tags[] = $tags_arr[$t_name];
$matched_tags[] = $t_name;
}
}
$searh_tags = implode( ' ', $searh_tags );
// OR 検索にしたい場合は、カンマ繋ぎにする
// $searh_tags = implode( ',', $searh_tags );
if ( $searh_tags ) {
$_GET['tag'] = $searh_tags;
$_GET['tag_name'] = implode( ',', $matched_tags );
} else {
unset( $_GET['tag_name'] );
}
}
}
add_action( 'load-edit.php', 'convert_tag_name2tag_slug' );
※ 複数のタグを指定する場合は、半角カンマ繋ぎで入力してください。
>jim912様
ご返信ありがとうございました。
なるほどそういうFOCKが存在したわけですね。
一度試させて頂きます。
本当にありがとうございました。