0

標準の wordpress ニュースだけでなく、カスタム投稿タイプにも index.php ファイルを使用する必要があります。

私の index.php ファイルでは、引数やパラメーターのない標準ループを使用しています。

アクション「pre_get_posts」で機能させようとしています。クエリの投稿タイプを変更しようとしていますが、まだ機能しません。

$query->set('post_type', 'any')

したがって、/dossiers/ が index.php を使用する方法が必要です。これは、URL で /dossiers/ が検出されたときにループのクエリを変更する必要があることを意味します。

どうもありがとう!

編集:

「pre_get_post」で呼び出す関数は次のとおりです。

function custom_post_types( $query ) { 
    if( $query->is_main_query() && $query->query['name'] == 'dossiers' ) {
        $query->set('post_type', 'any');

        var_dump($query);
    }   
}

$query の var_dump は次のとおりです。

object(WP_Query)#100 (42) {
  ["query"]=>
  array(2) {
  ["page"]=>
  string(0) ""
  ["name"]=>
  string(8) "dossiers"
}
["query_vars"]=>
array(46) {
  ["page"]=>
  string(0) ""
  ["name"]=>
  string(8) "dossiers"
  ["error"]=>
  string(0) ""
  ["m"]=>
  int(0)
  ["p"]=>
  int(0)
  ["post_parent"]=>
  string(0) ""
  ["subpost"]=>
  string(0) ""
  ["subpost_id"]=>
  string(0) ""
  ["attachment"]=>
  string(0) ""
  ["attachment_id"]=>
  int(0)
  ["static"]=>
  string(0) ""
  ["pagename"]=>
  string(0) ""
  ["page_id"]=>
  int(0)
  ["second"]=>
  string(0) ""
  ["minute"]=>
  string(0) ""
  ["hour"]=>
  string(0) ""
  ["day"]=>
  int(0)
  ["monthnum"]=>
  int(0)
  ["year"]=>
  int(0)
  ["w"]=>
  int(0)
  ["category_name"]=>
  string(0) ""
  ["tag"]=>
  string(0) ""
  ["cat"]=>
  string(0) ""
  ["tag_id"]=>
  string(0) ""
  ["author_name"]=>
  string(0) ""
  ["feed"]=>
  string(0) ""
  ["tb"]=>
  string(0) ""
  ["paged"]=>
  int(0)
  ["comments_popup"]=>
  string(0) ""
  ["meta_key"]=>
  string(0) ""
  ["meta_value"]=>
  string(0) ""
  ["preview"]=>
  string(0) ""
  ["s"]=>
  string(0) ""
  ["sentence"]=>
  string(0) ""
  ["fields"]=>
  string(0) ""
  ["category__in"]=>
    array(0) {
  }
  ["category__not_in"]=>
    array(0) {
  }
  ["category__and"]=>
    array(0) {
  }
  ["post__in"]=>
    array(0) {
  }
  ["post__not_in"]=>
    array(0) {
  }
  ["tag__in"]=>
    array(0) {
  }
  ["tag__not_in"]=>
    array(0) {
  }
  ["tag__and"]=>
    array(0) {
  }
  ["tag_slug__in"]=>
    array(0) {
  }
  ["tag_slug__and"]=>
    array(0) {
  }
  ["post_type"]=>
    string(3) "any"
}
  ["tax_query"]=>
  NULL
  ["meta_query"]=>
  bool(false)
  ["post_count"]=>
  int(0)
  ["current_post"]=>
  int(-1)
  ["in_the_loop"]=>
  bool(false)
  ["comment_count"]=>
  int(0)
  ["current_comment"]=>
  int(-1)
  ["found_posts"]=>
  int(0)
  ["max_num_pages"]=>
  int(0)
  ["max_num_comment_pages"]=>
  int(0)
  ["is_single"]=>
  bool(true)
  ["is_preview"]=>
  bool(false)
  ["is_page"]=>
  bool(false)
  ["is_archive"]=>
  bool(false)
  ["is_date"]=>
  bool(false)
  ["is_year"]=>
  bool(false)
  ["is_month"]=>
  bool(false)
  ["is_day"]=>
  bool(false)
  ["is_time"]=>
  bool(false)
  ["is_author"]=>
  bool(false)
  ["is_category"]=>
  bool(false)
  ["is_tag"]=>
  bool(false)
  ["is_tax"]=>
  bool(false)
  ["is_search"]=>
  bool(false)
  ["is_feed"]=>
  bool(false)
  ["is_comment_feed"]=>
  bool(false)
  ["is_trackback"]=>
  bool(false)
  ["is_home"]=>
  bool(false)
  ["is_404"]=>
  bool(false)
  ["is_comments_popup"]=>
  bool(false)
  ["is_paged"]=>
  bool(false)
  ["is_admin"]=>
  bool(false)
  ["is_attachment"]=>
  bool(false)
  ["is_singular"]=>
  bool(true)
  ["is_robots"]=>
  bool(false)
  ["is_posts_page"]=>
  bool(false)
  ["is_post_type_archive"]=>
  bool(false)
  ["query_vars_hash"]=>
  string(32) "3cd80adcb57d626df6535f6dafb98057"
  ["query_vars_changed"]=>
  bool(false)
  ["thumbnails_cached"]=>
  bool(false)
}

「name」の値は「dossiers」に設定されています。これは、投稿名のスラッグであるはずです。「」に設定すると、最後のカスタム投稿タイプで single.php にリダイレクトされます。

4

1 に答える 1

0

あなたの条件が$queryオブジェクトと適切に相互作用していないと思われます。

試す:

if( $query->is_main_query() && $query->query_vars['name'] == 'dossiers' )

それがうまくいかない場合は、おそらくこれがうまくいくでしょう:

$query_var_name = get_query_var('name');
if( $query->is_main_query() && $query_var_name == 'dossiers' )

また、何らかのテストを追加して、index.php が実際に /dossiers にアクセスしたときに Wordpress が使用しているテンプレート ファイルであることを確認します。

于 2012-11-21T15:06:17.937 に答える