Title: カスタムフィールドテンプレートを使って検索するとサイドバーのループ
Last modified: 2016年8月1日

---

# カスタムフィールドテンプレートを使って検索するとサイドバーのループ

 *  [yukiforweb](https://ja.wordpress.org/support/users/yukiforweb/)
 * (@yukiforweb)
 * [14年、 4ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%95%e3%82%a3%e3%83%bc%e3%83%ab%e3%83%89%e3%83%86%e3%83%b3%e3%83%97%e3%83%ac%e3%83%bc%e3%83%88%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e6%a4%9c%e7%b4%a2%e3%81%99/)
 * カスタムフィールドテンプレートのプラグインを使用しています。
    テンプレート上で、
   カスタムフィールドテンプレートの検索用ショートコードを
 *     ```
       echo do_shortcode('[cgtsearch format=0]');
       ```
   
 * のようにテンプレートファイルに直接記入し、
    search.phpで、
 *     ```
       //メインループ
       if (have_posts()) :
       	while (have_posts()) : the_post();
       		the_title();
       	endwhile;
       endif;
       wp reset query();
       ```
   
 * サイドバーに、
 *     ```
       //サブループ
       $args = array(
       	'post_type' => 'test',//カスタム投稿タイプ
       	'posts_per_page' => '1',//表示件数
       	);
       $custom_post_loop = new WP_Query($args);
       if($custom_post_loop->have_posts()):
       	while($custom_post_loop->have_posts()):
       		$custom_post_loop->the_post();
       		the_content();
       	endwhile;
       endif;
       wp_reset_postdata();
       ```
   
 * としています。
 * この時、カスタムフィールドテンプレートの検索機能を使うと、
    サイドバーのサブループ
   にも、カスタムフィールドテンプレートのフィルターが適用されて困っています。
 * どこに問題があるのでしょうか。

9件の返信を表示中 - 1 - 9件目 (全9件中)

 *  [popup](https://ja.wordpress.org/support/users/popup/)
 * (@popup)
 * [14年、 4ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%95%e3%82%a3%e3%83%bc%e3%83%ab%e3%83%89%e3%83%86%e3%83%b3%e3%83%97%e3%83%ac%e3%83%bc%e3%83%88%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e6%a4%9c%e7%b4%a2%e3%81%99/#post-148994)
 * wp reset query() はミスタイプでしょうか？
 *  トピック投稿者 [yukiforweb](https://ja.wordpress.org/support/users/yukiforweb/)
 * (@yukiforweb)
 * [14年、 4ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%95%e3%82%a3%e3%83%bc%e3%83%ab%e3%83%89%e3%83%86%e3%83%b3%e3%83%97%e3%83%ac%e3%83%bc%e3%83%88%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e6%a4%9c%e7%b4%a2%e3%81%99/#post-148995)
 * > popupさま
 * > wp reset query() はミスタイプでしょうか？
 * wp_reset_query();のタイプミスです。申し訳ございません。
 *  [popup](https://ja.wordpress.org/support/users/popup/)
 * (@popup)
 * [14年、 4ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%95%e3%82%a3%e3%83%bc%e3%83%ab%e3%83%89%e3%83%86%e3%83%b3%e3%83%97%e3%83%ac%e3%83%bc%e3%83%88%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e6%a4%9c%e7%b4%a2%e3%81%99/#post-149006)
 * カスタムフィールドテンプレートでSQL関係のフィルタに追加された関数が原因でした。
   
 *     ```
       if ( isset($_REQUEST['cftsearch_submit']) ) :
       			if ( !empty($_REQUEST['limit']) )
       				add_action( 'post_limits', array(&$this, 'custom_field_template_post_limits'));
       			add_filter( 'posts_join', array(&$this, 'custom_field_template_posts_join') );
       			add_filter( 'posts_where', array(&$this, 'custom_field_template_posts_where'), 100 );
       			add_filter( 'posts_orderby',  array(&$this, 'custom_field_template_posts_orderby' ) );
       		endif;
       ```
   
 * 　
    検索条件によっては一部のフィルタのみ除去すれば動作すると思いますが、一応すべて
   除去するようにします。（検索結果表示のループ後に記述） **search.php**
 *     ```
       endwhile; // End while(have_posts)
       			if ( isset($_REQUEST['cftsearch_submit']) ) :
       				if ( !empty($_REQUEST['limit']) )
       					remove_all_filters( 'post_limits' );
       				remove_all_filters( 'posts_join' ) ;
       				remove_all_filters( 'posts_where' ) ;
       				remove_all_filters( 'posts_orderby' ) ;
       			endif; ?>
       ```
   
 * 　
    上記を関数にしてfunctions.phpに記述し、search.phpから実行してもいいかもし
   れません。 今回、特定の関数だけ除去することが出来なかったのですが、もっとスマート
   なやり方があったらどなたか回答お願いします。
 *  トピック投稿者 [yukiforweb](https://ja.wordpress.org/support/users/yukiforweb/)
 * (@yukiforweb)
 * [14年、 4ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%95%e3%82%a3%e3%83%bc%e3%83%ab%e3%83%89%e3%83%86%e3%83%b3%e3%83%97%e3%83%ac%e3%83%bc%e3%83%88%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e6%a4%9c%e7%b4%a2%e3%81%99/#post-149008)
 * ありがとうございます。
 * やはり上記の部分が問題だったんですね。
 * `remove_filter( 'posts_join', 'custom_field_template_posts_join' );`
 * のように（よくわからずに）、remove_filterを試してみたのですが、
    全く効果がなか
   ったので、凹んでいました。。。
 * 明日、早速このコードを試させて頂きます！
    本当にありがとうございました
 *  トピック投稿者 [yukiforweb](https://ja.wordpress.org/support/users/yukiforweb/)
 * (@yukiforweb)
 * [14年、 4ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%95%e3%82%a3%e3%83%bc%e3%83%ab%e3%83%89%e3%83%86%e3%83%b3%e3%83%97%e3%83%ac%e3%83%bc%e3%83%88%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e6%a4%9c%e7%b4%a2%e3%81%99/#post-149014)
 * 戴いたコードを、`endwhile;`の後でなく、`endif;`の後に追加しました。
    （一件も
   該当データがなかったときに、remove_all_filtersがスルーされないように）
 * **search.php**
 *     ```
       if(have_posts()):while(have_posts()):the_post();
       the_title();
       endwhile;  //endwhile;の後ろではなく
       endif;     //endif;の後ろに入れました。
       //以下、いただいたコード
       if ( isset($_REQUEST['cftsearch_submit']) ) :
       	if ( !empty($_REQUEST['limit']) )
       	echo remove_all_filters( 'post_limits' );
       	echo remove_all_filters( 'posts_join' ) ;
       	echo remove_all_filters( 'posts_where' ) ;
       	echo remove_all_filters( 'posts_orderby' ) ;
       endif;
       //以上、いただいたコード
       wp_reset_query();
       ```
   
 * とりあえず、これで、search.phpのメインループ「以降」のサブループに、余計なフィルター
   がかかることがなくなりましたが、search.phpのメインループ「以前」に読み込まれて
   いるサブループには、相変わらず余計なフィルターがかかっていました。
 * ので、
 * **functions.php**
 *     ```
       function removeCftSearchFilters(){
       //戴いたコードのコピペ
       	if ( isset($_REQUEST['cftsearch_submit']) ) :
       				if ( !empty($_REQUEST['limit']) )
       					remove_all_filters( 'post_limits' );
       				remove_all_filters( 'posts_join' ) ;
       				remove_all_filters( 'posts_where' ) ;
       				remove_all_filters( 'posts_orderby' ) ;
       	endif;
       }
       ```
   
 * を作成し、
    **search.php**
 *     ```
       if(have_posts()):while(have_posts()):the_post();
       the_title();
       endwhile;  //endwhile;の後ろではなく
       endif;     //endif;の後ろに入れました。
       removeCftSearchFilters();  //<=関数の挿入
       wp_reset_query();
       ```
   
 * **search.phpより前のサブループ**
 *     ```
       $args = array(
       	'post_type' => 'test',//カスタム投稿タイプ
       	'posts_per_page' => '1',//表示件数
       	);
       removeCftSearchFilters();  //<=関数の挿入
       $custom_post_loop = new WP_Query($args);
       //以下略
       ```
   
 * とやることで対処いたしました。
 * ※全くスマートでないので、よりスマートな方法を教えていただきたいです＾＾；
 *  [popup](https://ja.wordpress.org/support/users/popup/)
 * (@popup)
 * [14年、 4ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%95%e3%82%a3%e3%83%bc%e3%83%ab%e3%83%89%e3%83%86%e3%83%b3%e3%83%97%e3%83%ac%e3%83%bc%e3%83%88%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e6%a4%9c%e7%b4%a2%e3%81%99/#post-149016)
 * >  戴いたコードを、endwhile;の後でなく、endif;の後に追加しました。
   >  （一件も該当
   > データがなかったときに、remove_all_filtersがスルーされないように）
 * 　
    そうでしたね。気がつきませんでした。
 * 未確認ですが、$argsで’suppress_filters’をtrueにするとフィルタが抑制されて、サブ
   ループにはcftのフィルタは適用されないかもしれません。
    　
 *     ```
       $args = array(
       	'post_type' => 'test',//カスタム投稿タイプ
       	'posts_per_page' => '1',//表示件数
       	'suppress_filters' => true
       	);
       ```
   
 * 　
    メインループ以降のサブループも上記の方法でいいかもしれません。(^^; get_posts()
   でしたら、デフォルトでフィルタが抑制されます。 [テンプレートタグ/get_posts – Codex 日本語版](http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/get_posts)
 *  トピック投稿者 [yukiforweb](https://ja.wordpress.org/support/users/yukiforweb/)
 * (@yukiforweb)
 * [14年、 4ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%95%e3%82%a3%e3%83%bc%e3%83%ab%e3%83%89%e3%83%86%e3%83%b3%e3%83%97%e3%83%ac%e3%83%bc%e3%83%88%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e6%a4%9c%e7%b4%a2%e3%81%99/#post-149017)
 * **search.phpより前のサブループ**
 *     ```
       $args = array(
       	'post_type' => 'test',//カスタム投稿タイプ
       	'posts_per_page' => '1',//表示件数
       	'suppress_filters' => true, // suppress_filtersを使用
       	);
       // removeCftSearchFilters();  remove_all_filters()を適用するのやめる
       $custom_post_loop = new WP_Query($args);
       //以下略
       ```
   
 * で試してみましたが、cftのフィルタは適用されてしまいました＾＾；
 *  [popup](https://ja.wordpress.org/support/users/popup/)
 * (@popup)
 * [14年、 4ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%95%e3%82%a3%e3%83%bc%e3%83%ab%e3%83%89%e3%83%86%e3%83%b3%e3%83%97%e3%83%ac%e3%83%bc%e3%83%88%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e6%a4%9c%e7%b4%a2%e3%81%99/#post-149024)
 * 試してみましたが、こちらでは大丈夫ですね。
    パラメータ’suppress_filters’を指定
   して対処するのが一番シンプルでいいと思いますが。 search.phpのメインループより
   前のサブループですよね？ どこにどのように記述していますか？ デフォルトテーマで
   試すとどうなるでしょう？
 *  [popup](https://ja.wordpress.org/support/users/popup/)
 * (@popup)
 * [14年、 4ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%95%e3%82%a3%e3%83%bc%e3%83%ab%e3%83%89%e3%83%86%e3%83%b3%e3%83%97%e3%83%ac%e3%83%bc%e3%83%88%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e6%a4%9c%e7%b4%a2%e3%81%99/#post-149025)
 * functions.phpに次を記述するだけで、cftsearchの検索結果ページでメインループを除
   いてフィルターが除去されます。
    search.php、sidebar.phpには何も記述する必要が
   ありません。 　
 *     ```
       function remove_posts_filter($wp_query) {
       	if(!$wp_query->is_main_query() && isset($_REQUEST['cftsearch_submit']) ) :
       		if ( !empty($_REQUEST['limit']) )
       			remove_all_filters( 'post_limits' );
       		remove_all_filters( 'posts_join' ) ;
       		remove_all_filters( 'posts_where' ) ;
       		remove_all_filters( 'posts_orderby' ) ;
       	endif;
       }
       add_action( 'pre_get_posts', 'remove_posts_filter' );
       ```
   
 * 　
    サブループでposts_whereフィルタを利用していなければ上記で大丈夫ですが、そう
   でない場合は、各サブループの方で’suppress_filters’によりフィルターを適用しない
   ようにした方がいいと思います。 WP_Query()でも、本来’suppress_filters’でフィルター
   適用の有無を変更出来るようですので、動作しないということはどこかに不具合がある
   のだと思いますから、デフォルトテーマで正常に動作するか確認しておいた方がいいと
   思います。

9件の返信を表示中 - 1 - 9件目 (全9件中)

 トピック「カスタムフィールドテンプレートを使って検索するとサイドバーのループ」に
は新たに返信することはできません。

 * フォーラム: [プラグイン](https://ja.wordpress.org/support/forum/plugins/)
 * 9件の返信
 * 2人の参加者
 * 最後の返信者: [popup](https://ja.wordpress.org/support/users/popup/)
 * 最後の活動: [14年、 4ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%95%e3%82%a3%e3%83%bc%e3%83%ab%e3%83%89%e3%83%86%e3%83%b3%e3%83%97%e3%83%ac%e3%83%bc%e3%83%88%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e6%a4%9c%e7%b4%a2%e3%81%99/#post-149025)
 * 状態: 未解決

## トピック

### 人気のトピック

### 返信がないトピック

### サポート関連ではないトピック

### 解決済みのトピック

### 未解決のトピック

### すべてのトピック
