2017-11-21 4 views
0

をピックアップ:「犬のポストタイプ(mysite.com/dog)のためのアーカイブページではWordpressのは、私は2つの次のカスタムポストタイプの登録したカスタムポストタイプのアーカイブページの間違ったテンプレート

function dogs() { 

    $labels = array(
     'name' => 'Dogs' 
    ); 

    $args = array(
     'labels' => $labels, 
     'public' => true, 
     'has_archive' => true,    
     'supports' => array('title', 'editor', 'thumbnail', 'excerpt') 
    ); 

    register_post_type('dog', $args); 
} 

function cats() { 

    $labels = array(
     'name' => 'Cats' 
    ); 

    $args = array(
     'labels' => $labels, 
     'public' => true, 
     'has_archive' => true, 
     'supports' => array('title', 'editor', 'thumbnail', 'excerpt') 
    ); 

    register_post_type('cat', $args); 
} 

を、私が表示したいです「犬」と「猫」の両方のポストタイプを使用する投稿。だから私はarchive-dog.phpと呼ばれ、このようなメインクエリを変更されたカスタムテンプレートを作成しました:

add_action('pre_get_posts', 'cats_and_dogs')); 

function cats_and_dogs($query) { 
    if(! is_admin() && is_post_type_archive('dog')) { 
     if($query->is_main_query()) { 
      $query->set('post_type', array('dog', 'cat' )); 
      $query->set('posts_per_page', 4); 
      $query->set('post_status', 'publish'); 
      $query->set('post__not_in', get_option('sticky_posts')); 
     } 
    }   
} 

私はmysite.com/dogを訪れたとき、私はWordpressのは、自動的にarchive-dog.phpを拾うと「犬」と「猫のポストの両方を表示するように期待します。その代わりに、「犬」と「猫」の両方の投稿を表示していますが、archive-dog.phpを受け取っていませんが、archive.phpに戻ります。変更されたメインクエリから「cat」ポストタイプを削除して「dog」のみを残すと、すべて正常に動作します。投稿タイプ私のカスタムアーカイブテンプレートの両方をどのように持つことができますか?

+0

を私は事のアーカイブ-dog.phpが変更されたクエリを行うには何も持っていない、一度パーマリンクを更新しようと、それは、正常に動作してテストされておらず、ちょうど前提です。 –

答えて

0

あなたのfunctions.phpに入れ、以下のコードを、お楽しみください:

add_filter('template_include', 'use_archive_dog', 99); 
function use_archive_dog($template) { 

    if (is_post_type_archive('dog') ) { 
     $new_template = locate_template(array('archive-dog.php')); 
     if ('' != $new_template) { 
      return $new_template ; 
     } 
    } 

    return $template; 
} 
関連する問題