管理画面での「絞り込み検索」

Simplicityの特徴 フォーラム Simplicity2に関する話題何でも 管理画面での「絞り込み検索」

このトピックには11件の返信が含まれ、2人の参加者がいます。9 ヶ月、 3 週間前 technote さんが最後の更新を行いました。

  • 投稿者
    投稿
  • #46893

    盛土

    テーマと関係なくスミマセン

    WP管理画面の投稿一覧で記事を探すとき
    日付とカテゴリーで絞り込み検索できるのですが
    タグで絞り込み検索できないかと

    色々と調べているのですが
    サイト上で記事を検索するものばかりで・・

  • #46899
    わいひら
    わいひら
    キーマスター

    ここら辺あたりの方法でできるのではないかと思います。
    WordPressの投稿一覧でタグのフィルタリングを追加する | Simple Colors
    ただ、実際に試したわけではないので、保証はないです。
    うまくいかなかった場合に、複雑なカスタマイズはサポート外となるので、何とか自前で行っていただけると助かります。
    サポート対象外のもの

  • #46901

    盛土

    できました!!

    教えて頂きましたLINK先のコードを
    子テーマfunctions.phpにそのままコピペしました

    カテゴリーみたいにプルダウンでないのが残念ですが
    カテゴリーと組み合わせて検索でき
    編集作業が捗り満足してます

    アドバイス頂きまして
    ありがとうございました
    m(_ _)m

  • #46923

    technote

    以下のコードでプルダウンを追加することは可能です。

    add_action('restrict_manage_posts', create_function('', <<< EOT
    	global \$post_type, \$tag;
    	if ( is_object_in_taxonomy( \$post_type, 'post_tag' ) ) {
    		\$dropdown_options = array(
    			'show_option_all' => get_taxonomy( 'post_tag' )->labels->all_items,
    			'hide_empty' => 0,
    			'hierarchical' => 1,
    			'show_count' => 0,
    			'orderby' => 'name',
    			'selected' => \$tag,
    			'name' => 'tag',
    			'taxonomy' => 'post_tag',
    			'value_field' => 'slug'
    		);
    		wp_dropdown_categories( \$dropdown_options );
    	}
    EOT
    ));
  • #46927

    翔平

    technote様

    ありがとうございます
    見事にプルダウンが表示されました!

    でも
    「すべてのタグ」で検索するとなにもヒットしません
    任意のタグで絞り込むとヒットします

    つまり
    カテゴリーだけでの検索が出来ないようです

    以上
    ご報告まで

  • #46929
    わいひら
    わいひら
    キーマスター

    紹介したカスタマイズを自分でも試したところ、よさげで、次のバージョンでこの機能を実装しようと思っていたので、それ用のコードも載せておきます。
    次のバージョンを採用する際には、今回追加したコードは削除したほうがいいかもしれません。

    //投稿一覧リストの上にタグフィルターを追加する
    if ( !function_exists( 'add_tag_restrict_filter_on_post_list' ) ):
    function add_tag_restrict_filter_on_post_list() {
        global $post_type;
        if ( is_object_in_taxonomy( $post_type, 'post_tag' ) ) {
          $tag_name = $_GET && $_GET['tag_name'] ? $_GET['tag_name'] : '';
    ?>
      <?php $tags = get_tags(); if ( $tags ) : ?>
      <select name="tag_name">
        <option value=""<?php echo $tag_name ? '' : ' selected="selected"'; ?>>タグを選択</option>
        <?php foreach ( $tags as $tag ): ?>
        <option value="<?php echo $tag->name; ?>"<?php echo $tag_name == $tag->name ? ' selected="selected"' : ''; ?>><?php echo esc_html( $tag->name ); ?> (<?php echo $tag->count; ?>)</option>
        <?php endforeach; ?>
      </select>
      <?php endif; ?>
      <!-- <input name="tag_name" size="25" value="<?php echo esc_html( $_GET ? $_GET['tag_name'] : '' ); ?>" class="postform" /> -->
    <?php
        }
    }
    endif;
    add_action( 'restrict_manage_posts', 'add_tag_restrict_filter_on_post_list' );
    
    //タグネームをタグスラッグに変換する
    if ( !function_exists( 'convert_tag_name_to_tag_slug' ) ):
    function convert_tag_name_to_tag_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'] );
        }
      }
    }
    endif;
    add_action( 'load-edit.php', 'convert_tag_name_to_tag_slug' );
  • #46931

    technote

    タグを選択していない場合の動作を忘れていました。

    add_action('load-edit.php', create_function('', <<< EOT
    	if (isset(\$_GET['tag']) && '0' === \$_GET['tag']) {
    		unset (\$_GET['tag']);
    	}
    EOT
    ));

    ついでに作成者で絞り込むプルダウンも追加してみました。

    add_action('restrict_manage_posts', create_function('', <<< EOT
    	global \$post_type, \$tag;
    	if ( is_object_in_taxonomy( \$post_type, 'post_tag' ) ) {
    		\$dropdown_options = array(
    			'show_option_all' => get_taxonomy( 'post_tag' )->labels->all_items,
    			'hide_empty' => 0,
    			'hierarchical' => 1,
    			'show_count' => 0,
    			'orderby' => 'name',
    			'selected' => \$tag,
    			'name' => 'tag',
    			'taxonomy' => 'post_tag',
    			'value_field' => 'slug'
    		);
    		wp_dropdown_categories( \$dropdown_options );
    	}
    
    	wp_dropdown_users(
    		array(
    			'show_option_all' => 'すべてのユーザー',
    			'name' => 'author'
    		)
    	);
    EOT
    ));
  • #46932

    technote

    わいひら様
    プルダウン作成時にvalueにslugを使用すれば、「タグネームをタグスラッグに変換する」処理は必要ありません。

    //投稿一覧リストの上にタグフィルターを追加する
    if ( !function_exists( 'add_tag_restrict_filter_on_post_list' ) ):
    	function add_tag_restrict_filter_on_post_list() {
    		global $post_type;
    		if ( is_object_in_taxonomy( $post_type, 'post_tag' ) ) {
    			$_tag = $_GET && $_GET['tag'] ? $_GET['tag'] : '';
    			?>
    			<?php $tags = get_tags(); if ( $tags ) : ?>
    				<select name="tag">
    					<option value=""<?php echo $_tag ? '' : ' selected="selected"'; ?>>タグを選択</option>
    					<?php foreach ( $tags as $tag ): ?>
    						<option value="<?php echo $tag->slug; ?>"<?php echo $_tag == $tag->slug ? ' selected="selected"' : ''; ?>><?php echo esc_html( $tag->name ); ?> (<?php echo $tag->count; ?>)</option>
    					<?php endforeach; ?>
    				</select>
    			<?php endif; ?>
    			<!-- <input name="tag_name" size="25" value="<?php echo esc_html( $_GET ? $_GET['tag_name'] : '' ); ?>" class="postform" /> -->
    			<?php
    		}
    	}
    endif;
    add_action( 'restrict_manage_posts', 'add_tag_restrict_filter_on_post_list' );
  • #46933
    わいひら
    わいひら
    キーマスター

    確かに、僕の書いたのはコピペをただ動くものにしただけなので、なんか二度手間みたいなことになってますね^^;
    というか、technoteさんの書かれている方法のほうが、スマートでコードも見やすいので次のバージョンでは、こちらを使わせていただこうと思います。

    //投稿一覧リストの上にタグフィルターと管理者フィルターを追加する
    if ( !function_exists( 'custmuize_restrict_manage_posts' ) ):
    function custmuize_restrict_manage_posts(){
      global $post_type, $tag;
      if ( is_object_in_taxonomy( $post_type, 'post_tag' ) ) {
        $dropdown_options = array(
          'show_option_all' => get_taxonomy( 'post_tag' )->labels->all_items,
          'hide_empty' => 0,
          'hierarchical' => 1,
          'show_count' => 0,
          'orderby' => 'name',
          'selected' => $tag,
          'name' => 'tag',
          'taxonomy' => 'post_tag',
          'value_field' => 'slug'
        );
        wp_dropdown_categories( $dropdown_options );
      }
    
      wp_dropdown_users(
        array(
          'show_option_all' => 'すべてのユーザー',
          'name' => 'author'
        )
      );
    }
    endif;
    add_action('restrict_manage_posts', 'custmuize_restrict_manage_posts');

    使わせていただきます。ありがとうございます!

  • #46934
    わいひら
    わいひら
    キーマスター

    あ、「全てのタグ」選択時の処理も書く必要があるのか。

    //投稿一覧リストの上にタグフィルターと管理者フィルターを追加する
    if ( !function_exists( 'custmuize_restrict_manage_posts' ) ):
    function custmuize_restrict_manage_posts(){
      global $post_type, $tag;
      if ( is_object_in_taxonomy( $post_type, 'post_tag' ) ) {
        $dropdown_options = array(
          'show_option_all' => get_taxonomy( 'post_tag' )->labels->all_items,
          'hide_empty' => 0,
          'hierarchical' => 1,
          'show_count' => 0,
          'orderby' => 'name',
          'selected' => $tag,
          'name' => 'tag',
          'taxonomy' => 'post_tag',
          'value_field' => 'slug'
        );
        wp_dropdown_categories( $dropdown_options );
      }
    
      wp_dropdown_users(
        array(
          'show_option_all' => 'すべてのユーザー',
          'name' => 'author'
        )
      );
    }
    endif;
    add_action('restrict_manage_posts', 'custmuize_restrict_manage_posts');
    
    //投稿一覧で「全てのタグ」選択時は$_GET['tag']をセットしない
    if ( !function_exists( 'custmuize_load_edit_php' ) ):
    function custmuize_load_edit_php(){
      if (isset($_GET['tag']) && '0' === $_GET['tag']) {
        unset ($_GET['tag']);
      }
    }
    endif;
    add_action('load-edit.php', 'custmuize_load_edit_php');
  • #46935

    盛土

    プルダウン実装できました!
    (バージョンアップ時には削除します)

    絞り込み検索上の「投稿を検索」でも
    タグを検索できると
    良いんですけどね

    ありがとうございました
    m(_ _)m

  • #46936

    technote

    わいひら様
    対応ありがとうございます。

トピック「管理画面での「絞り込み検索」」への新規返信追加は締め切られています。

スポンサーリンク
アドセンス(大)
アドセンス(大)