web-dev-qa-db-ja.com

分類用語のアーカイブテンプレート

カスタム投稿タイプ[equipment]を登録し、親カテゴリと子カテゴリを持つ分類内に[equipment_type]の分類を持っています。例えば:

備品(カスタムポストタイプ)

設備タイプ(分類)

カメラ(親会社)

  • カメラA(子供用)

  • カメラB

私が作成したいのは、事実上分類学用語のアーカイブページです。そのため、「カメラ」または「カメラA」のどちらかを選択すると、タイトルと機能のある画像(単一の投稿へのリンク)を含む12の投稿と、ページ付けが行われます。

私は標準的なWPクエリとループを試みました、そしてそれは常にすべての用語ですべての分類法投稿を示すことになります。

現在、クエリを処理するためのtaxonomy-equipment_types.phpテンプレートが設定されています。

3
user1833715

私は最近答えを見つけたのでこれを文書化したいと思います。

分類法を持つことの問題は、ほとんどの開発者が 期待するという考え方 /のpost_type URLの内部に見られる分類法を持っていることです。

http://hostname/post_type/taxonomy_term

代わりに、次の場所にURLがあります。

http://hostname/taxonomy_slug/taxonomy_term

つまり、 テンプレートを正しく作成している可能性があります as

taxonomy-taxonomy_slug-taxonomy_term.php

しかし、それを使用する正しい方法は、URLの中にそれを期待することです

http://hostname/taxonomy_slug/taxonomy_term

正しいURLを表示する 分類法のために、我々は使用することができます

get_the_term_list($post->ID,'taxonomy_slug')

そして、リンクが指し示すところがどこであってもテストしてください。

3
Franz Noel

WordPressテンプレート階層は、必要な正確なテンプレートファイルを提供します: taxonomy-{taxonomy}-{term}.php

したがって、equipment_types分類法のcameras項のカスタムテンプレートを作成するには、taxonomy-equipment_types-cameras.phpという名前のファイルを作成します。

(注:taxonomy自体のテンプレートファイルを作成することもできます; {term}スラッグ:taxonomy-{taxonomy}.php、または場合によってはtaxonomy-equipment_types.phpを省略してください。)

get_term() によって返されるオブジェクトプロパティを介して親という用語、または子という用語のいずれかを照会することにより、階層に基づいて条件付きでコンテンツを出力できます。 get_term_children() 経由。

1
Chip Bennett

私は同様の問題を抱えていました。上記の回答の問題点は、CPT、分類法、または用語を指定する必要があることです。

あなたが示したように、あなたがユーザーがどのCPTページにいるかに応じて動的にこれを検索したいなら、あなたは現在のカスタム投稿タイプのためのすべての分類法を表示する次のことを試すことができます。

もともとGhostToastの助けを借りて、この記事から

 <?php get_header(); ?>
  <div id="content">
<div id="main">

  <ul>

<? // Start taxonomy term archives query
$post_type = get_post_type(); // find out CPT name
$taxonomies = get_object_taxonomies($post_type); // Find taxonomies
if($taxonomies){
foreach($taxonomies as $taxonomy){
// only want hierarchial -- no tags please
if(is_taxonomy_hierarchical($taxonomy)){

    $terms = get_terms($taxonomy, array(
'orderby'       => 'name', 
'order'         => 'Asc',
'hide_empty'    => true )); 

 foreach ( $terms as $term ) {  


// example output below ?>

<li>

 <h1><a href="<?php echo get_term_link($term->slug, $taxonomy); ?> "><? echo $term->name; ?></a></h1>

   <div class="imgBox">

     <a href="<?php echo get_term_link($term->slug, $taxonomy); ?> " title="<? echo $term->name; ?>" >
     <img src="<?php echo get_template_directory_uri(); ?>/timthumb.php?src=/library/images/dingy-placeholder.png&amp;h=196&amp;w=285&amp;zc=1" alt="<?php the_title(); ?>" /></a>
   </div>

           <div class="the-excerpt">
            <a href="<?php echo get_term_link($term->slug, $taxonomy); ?> "><? echo $term->description; //you can add this in admin ?> - click to view more</a>
            </div>
 </li>
        <?  

   }
 }
}
}?>

     </ul>


<?php wp_reset_query(); ?>

     </div> <!-- end #main -->
   </div> <!-- end #content -->

 <?php get_footer(); ?>

上記をarchive-mycpt.phpのような名前のファイルに保存してから、archive.phpにヘッダ呼び出しの後に追加してください。

<?php get_header(); ?>

<?php  // is this one of our CPT ? If so, direct to custom archive page 
  if ( is_custom_post_type() ){ 
include (TEMPLATEPATH . '/archive-mycpt.php'); 

        // if not continue...

    } else {  ?>

               <!-- archive.php content   -->

   <? } ?>
0
Sol