WordPress  
  カスタム投稿タイプを検索やフィードに加える方法
2018
18
Mar

カスタム投稿タイプを検索やフィードに加える方法

最終更新日: 2020年1月4日

このページをご覧の方の多くは検索結果にカスタム投稿タイプを含めるにはどうしたらよいかお悩みですね?

結論から先に書きます。以下のコードをテーマの functions.php の適当なところにコピペしてください。

menus のところはご自分の投稿タイプのスラッグに変更してください。

 

wordpressの検索結果にカスタム投稿タイプを含める方法

 
functions.php



add_action ( 'pre_get_posts', 'my_pre_get_posts' );
function my_pre_get_posts( $query ) {
  if ( ! is_admin() && $query->is_main_query() ) {
		
    //検索にカスタム投稿タイプを含める
    if ( is_search() ) {
      $query->set( 'post_type', array ( 'post', 'menus' ) );
      return $query;
    }
  }
}

 

なぜカスタム投稿タイプが検索結果に含まれていないのか?

 

これはカスタム投稿タイプがプラグインなどで使われることが多いからです。

例えば、プラグインで使用するユーザーの設定値をデータベースに保存するときに使う例です。有名なものではAdvanced Custom Fieldsプラグインもカスタム投稿タイプのカスタムフィールドを使って保存しています。この値は記事の内容とは無関係ですから検索結果には表示されない方がいいですよね。

最初から全てのカスタム投稿タイプが検索結果に含まれてしまうと、不要なものまで表示されてしまう訳です。

同様にフィードにも含まれていませんのでフィードにも含ませたい場合は下記を追加します。

 

wordpress のフィードにカスタム投稿タイプを含める方法

 

functions.php


add_action ( 'pre_get_posts', 'my_pre_get_posts' );
function my_pre_get_posts( $query ) {
  if ( ! is_admin() && $query->is_main_query() ) {
		
    //フィードにカスタム投稿タイプを含める
    if ( is_feed() ) {
      $post_type = $query->get( 'post_type' );
      if ( empty( $post_type ) ) {
        $query->set( 'post_type', array( 'post', 'menus' ) );
        return $query;
      }
    }
  }
}

 

今回はpre_get_posts にフックしましたが request にフックする方法もあるようです。Plugin API/Filter Reference/request

 

top