問題があります。
<?php query_posts('category_name=events&posts_per_page=2&offset=1'); ?>
<?php while (have_posts()) : the_post(); ?>
<div>
<?php $children = get_categories('child_of=3');
foreach ($children as $child) {
$child = get_category($child);
echo $child->cat_name;
}; ?>
</div>
<?php endif; ?>
<?php endwhile; ?>
任意の親カテゴリから現在のサブカテゴリ名を表示したいです。
これで私はただ指定された親からすべてのサブカテゴリ名を出力することに成功しています...
私はthe_category()
を使用しませんでした。なぜなら、それはリストにラップされたサブキャット名を出力するからで、マークアップを使わないで欲しいのです。
多くの新規ユーザーが陥る誤解に陥ったのではないかと疑っていますが、実現することはめったにありません。
私はあなたがこれをやったと思う:
これは悪いことであり、カテゴリがどのように機能するかについての理解の欠如を示唆しています。また、仮定が物事の現実と一致しない場合、コードに問題が発生します。しかし、心配しないで、誰もがこの間違いを犯します(私も含めて)。
たとえば、家は建物でもあると人々に伝えず、家は建物の一種であることをすでに知っています。そして、猫と犬は彼らが知るための動物であると言う必要はありません。サブカテゴリ「会議」または「関心グループ」に既にある場合、投稿が「イベント」カテゴリにあることをWordPressに伝える必要がないのと同じ方法。 「イベント」カテゴリにはそれらが含まれます。
すべきであったことはこれです:
ここでは、子カテゴリのみにチェックマークを付けましたが、子の下の投稿も親カテゴリのアーカイブ内に表示されます「親」には「子」が含まれているため。
子カテゴリは親カテゴリの子孫ではありません。子カテゴリは親カテゴリに含まれています。
あなたの場合、あなたはこれらの問題にぶつかって、投稿の現在のカテゴリーをつかみます:
するべきこと:
query_posts
の使用をやめて、真剣に、入力時にエディターに叫び声をあげさせ、USBおもちゃに泡のミサイルを発射させ、デスクトップの壁紙を血のプールにしてください絶対に使用しないそれを使用する言い訳はありません。無し。これはあなたの現在のコードです:
$children = get_categories('child_of=3');
foreach ($children as $child) {
$child = get_category($child);
echo $child->cat_name;
}
これにより、すべてのカテゴリ名がリストされます。この例では、親カテゴリと子カテゴリがチェックされているため、次のように出力されます。
parentchild
まず、より汎用的なより優れた関数を使用して、タグとカスタム分類を処理します。
$categories = wp_get_object_terms( get_the_ID(), 'cat');
次に、投稿に実際にカテゴリがあることを確認する必要があります。
if(!empty($categories)){
そして、それはエラーではなかった:
if(!is_wp_error( $categories )){
だからあなたの用語をループし、ニースリストに入れましょう:
echo '<ul>';
foreach($product_terms as $term){
それらを印刷します。
echo '<li><a href="'.get_term_link($term->slug, 'product').'">'.$term->name.'</a></li>';
そしてループを閉じます:
}
echo '</ul>';
}
}
これにより、投稿のすべてのカテゴリの完全なリストが表示されます。さて、あなたが問題を抱えている部分について。サブカテゴリのみを表示します。そのため、カテゴリを表示する前にサブカテゴリであるかどうかを確認する必要がありますが、これは行いません。
そう:
echo the term
になる:
if the term has no parent
echo the term
以下を実行することで、用語に親があるかどうかを確認できます。
if ( $term->parent != 0 ) {
また、気付いていない問題もあります。2つではなく3つのレベルのカテゴリがある場合はどうなりますか?サブサブカテゴリはどうですか?これを処理するには、おそらく最下位レベルのみを表示するか、サブカテゴリではなくサブカテゴリのみを表示します。そのためには、カテゴリ用語に子があるかどうかを知る必要があります。
また、次の操作を実行して、用語に子があるかどうかを確認できます。
if ( !empty( $term->children ) ) {
最終的なコードのアセンブリは読者のタスクとして残しますが、言われたことを理解すれば、何をする必要があるか(そしてどの行をどこに貼り付けるか)を理解できます。
これにより、両方のカテゴリをチェックするユーザーが修正されることはありませんので、注意する必要があります。これを回避する方法には、ユーザーが標準のチェックボックスUIの代わりにカスタムラジオボックスUIを使用して親カテゴリをチェックできないようにすることが含まれます。
これが、カテゴリアーカイブにサブカテゴリのすべての投稿も含まれている理由でもあります。
まず最初に、あなたはカスタムクエリを実行するために query_posts
を使うべきではありません。コーデックス自体から)
注:この関数はプラグインやテーマで使用するためのものではありません。後で説明するように、メインクエリーを変更するためのより優れた、より高性能なオプションがあります。それは非効率的で(SQLクエリを再実行します)、そして状況によっては完全に失敗するでしょう(特に投稿ページ付けを扱うとき)しばしば最近のWPコードこの目的のために、pre_get_postsフックを使用するなど、より信頼性の高い方法を使用する必要があります。
このカスタムクエリには WP_Query
を使用する必要があります。
$args = array(
'category_name' => 'events',
'posts_per_page' => 2,
'offset' => 1
);
$myquery = new WP_Query( $args );
while ($myquery->have_posts()) : $myquery->the_post();
<-----YOUR LOOP CONTENTS----->
endwhile;
wp_reset_postdata();
EDIT 1&EDIT 2
--SCRAPPED--
編集3
これは wp_list_categories()
からのコードの回避策です。
最初に get_the_category()
を使って親カテゴリのIDを取得する必要があります。
$categories = get_the_category();
$parentid = $categories[0]->category_parent;
この親IDをwp_list_categories()
に渡して、その特定の親の子カテゴリのみを表示することができます。子カテゴリが存在しない場合は親カテゴリ名を返し、そうでない場合は親が子を持つ場合は子カテゴリを返します。
これが完全な機能です
<?php
$taxonomy = 'category';
// get the term IDs assigned to post.
$post_terms = wp_get_object_terms( $post->ID, $taxonomy, array( 'fields' => 'ids' ) );
// separator between links
$separator = ', ';
$categories = get_the_category();
$parentid = $categories[0]->category_parent;
if ( !empty( $post_terms ) && !is_wp_error( $post_terms ) ) {
$term_ids = implode( ',' , $post_terms );
$terms = wp_list_categories( 'title_li=&style=none&echo=0&child_of=' . $parentid . '&taxonomy=' . $taxonomy . '&include=' . $term_ids );
$terms = rtrim( trim( str_replace( '<br />', $separator, $terms ) ), $separator );
// display post categories
echo $terms;
}
?>