2016-11-20 18 views
0

さまざまなカスタムフィールドを持つ4つのカスタム投稿タイプ(ビデオ、オーディオ、プログラム、ブログ)を作成しました。投稿タイプに応じて特定のカスタムフィールドを表示するカスタムアーカイブページを作成できました。アーカイブページは、特定のカスタム投稿タイプのアーカイブのみを表示しているときにうまく機能しています。私が抱えている問題は、カテゴリのアーカイブページです。Wordpress:カテゴリアーカイブページにカスタム投稿タイプUI(CPT UI)で作成したカスタム投稿タイプを含めるにはどうすればよいですか?

各カスタム投稿タイプはグローバル '投稿'カテゴリにアクセスできるため、すべてのカテゴリが各投稿タイプに表示されます。投稿の種類に関係なく、カテゴリを照会して関連付けられた投稿を表示できるようにしたいと考えています。すなわち、「ビジネス」カテゴリは、2つのビデオ、音声投稿、およびブログをプルアップすることができる。問題は、私のカテゴリページが今空であることです。ここで

は 'archive.php' で私の現在のループです:

​​

これは、アーカイブコンテンツのコンテンツ-archive.php」のテンプレートをつかむ:

<?php 
/** 
* Get featured posts from Archives 
*/ 

if(is_post_type_archive('videos')) { 

    $video_image = get_field('video_still_image'); 
    print_archive_post($video_image); 

} elseif(is_post_type_archive('programs')) { 

    $program_featured_image = get_field('program_featured_image'); 
    print_archive_post($program_featured_image); 

} elseif(is_post_type_archive('audio')) { 

    $audio_featured_image = get_field('audio_featured_image'); 
    print_archive_post($audio_featured_image); 

} elseif(is_post_type_archive('blogs')) { 

    $blog_featured_image = get_field('blog_featured_image'); 
    print_archive_post($blog_featured_image); 

} 

?> 

そして、ここに私は、機能を 'functions.php'から投稿用のコンテンツを作成するには:

// Function to print archive type posts 
function print_archive_post($image) { 

    echo '<div class="col-md-4 featured-thumb-container">'; 
    echo '<a href="' . get_the_permalink() . '"><span class="featured-thumb" style="background: url(' . $image . ')"></span></a>'; 
    echo '<h3><a href="' . get_the_permalink() . '">' . get_the_title() . '</a></h3>'; 

    // The category list 
    $post_cats= array(); 
    $categories = get_the_category(); 

    echo '<p class="category-list">'; 

     foreach($categories as $cat) : 
     echo '<a class="category-link" href="' . get_home_url() . '/category/' . $cat->slug . '">' . $cat->cat_name . '</a><span>,</span> '; 
     endforeach; 

    echo '</p>'; 

    echo '</div>'; 

} 

私はケイト私は研究で解決策を見つけることができませんでした。どんな助けでも大歓迎です。 :)

+0

ポストタイプごとにカスタムタクソノミーを作成してみませんか? – ucheng

+0

@uchengご返信ありがとうございます!異なるタクソノミを作成する際の私の問題は、冗長性です。この場合、4つの「ビジネス」カテゴリがあります。それぞれのポストタイプに1つのカテゴリがあります。 1つのカテゴリに関連するすべてのカスタム投稿タイプを取得する方法はありますか? –

+0

私はそれを正しく理解しているかどうかわからない、回答を追加します。そうでない場合は、私に知らせてください。私は答えを更新します。 – ucheng

答えて

0

したがって、いくつかの調査の後、私は解決策を見つけました。 Wordpressの組み込みのカテゴリとタグに自分のカスタム投稿タイプを追加する必要がありました。ここで私は私のfunctions.phpファイルに追加のコードは次のとおりです。

// Add custom post types to default WP categories and tags 
function add_custom_types_to_tax($query) { 
    if(is_category() || is_tag() && empty($query->query_vars['suppress_filters'])) { 

     // Get all your post types 
     $post_types = get_post_types(); 

     $query->set('post_type', $post_types); 
     return $query; 
    } 
} 
add_filter('pre_get_posts', 'add_custom_types_to_tax'); 

私はここのコードが見つかりました:https://premium.wpmudev.org/blog/add-custom-post-types-to-tags-and-categories-in-wordpress/

はまた、私は唯一のカテゴリアーカイブのcategory.phpファイルを作成しました。私はarchive.phpファイルと同じコードを使用しましたが、カテゴリコンテンツ用の新しいテンプレートファイルである 'content-category-archive.php'を入れ替えました。このテンプレートのコードは次のとおりです。

<?php 
/** 
* Get featured posts from Category Archives 
*/ 

if(get_post_type() == 'videos') { 

    $video_image = get_field('video_still_image'); 
    print_archive_post($video_image); 

} elseif(get_post_type() == 'programs') { 

    $program_featured_image = get_field('program_featured_image'); 
    print_archive_post($program_featured_image); 

} elseif(get_post_type() == 'audio') { 

    $audio_featured_image = get_field('audio_featured_image'); 
    print_archive_post($audio_featured_image); 

} elseif(get_post_type()== 'blogs') { 

    $blog_featured_image = get_field('blog_featured_image'); 
    print_archive_post($blog_featured_image); 

} 

?> 

これと他の 'content-archive.php'テンプレートとの違いは、各投稿タイプの条件です。 is_post_type_archive('my custom post type')を確認する代わりに、現在のカテゴリの各投稿の投稿タイプをget_post_type() == 'my custom post type'で確認しています。

私はこれが同じ問題を抱えている可能性のある他の人に役立つことを願っています。 :)

1

私はあなたの質問を正しく理解しています。 1つのカテゴリに関連するすべてのカスタム投稿を照会する場合は、アーカイブページでWP_Queryを使用できます。

//if you're on a category archive, it will return the category object 
    $category_object = get_queried_object(); 
    $args = array(
     'post_type' => 'your-cpt', 
     'cat' => $category_object->term_id 
); 

    $wp_query = new WP_Query($args); 

    if ($wp_query->have_posts()) { 

    while ($wp_query->have_posts()) { 
     $wp_query->the_post(); 
     //echo your posts 
    } 

    } else { 
     // aww, no posts... do other stuff 
    } 
    wp_reset_postdata(); 
+0

あなたのソリューションをありがとうが、残念ながらそれは動作しませんでした。しかし、私は解決策を見つけて投稿することができました。 –

関連する問題