web-dev-qa-db-ja.com

最後の子カテゴリの投稿のみを表示する方法

デフォルトでは、WordPressは階層内の各カテゴリの投稿を一覧表示します。

例:

/- 子

/ - 孫

「親」カテゴリを表示すると、子、孫、親からの投稿のリストが表示されます - たとえ投稿が「孫」でチェックされている場合でも.

私の質問は次のとおりです。最後の子を表示しているときに投稿を表示するにはどうすればよいですか。このための組み込みのWordPress機能はありますか?

例えば。:

[grandchild categories] = array of grandchildren

if(in_array( [grandchild categories] )) : show posts

else:

do nothing
2
Innate

分類法パラメーター の一部として、 include_children 用のWP_Queryパラメーターはもちろんあります。私はあなたのためにこのように働くべきだと思います:

$args = array(
    'tax_query' => array(
        array(
            'include_children' => false
        ),
    ),
);
$query = new WP_Query( $args );

カテゴリアーカイブの場合は、 parse_tax_query を使用します。

add_filter( 
    'parse_tax_query', 
    'wpse163572_do_not_include_children_in_category_archive_parse_tax_query' 
);
function wpse163572_do_not_include_children_in_category_archive_parse_tax_query( $query ) {
    if ( 
        ! is_admin() 
        && $query->is_main_query()
        && $query->is_category()
    ) {
        // as seen here: http://wordpress.stackexchange.com/a/140952/22534
        $query->tax_query->queries[0]['include_children'] = 0;
    }
}

注:@PieterGoosenのおかげで、これは現在テスト済みで動作確認済みです。

2
Nicolai

Pieterが上記のコメントで概説したように、ページを使って静的なWebサイトを開発したことがある人は問題を理解するでしょう。

基本的にページを作成してそのページ上にコンテンツをリストすることができれば望ましい効果がありますが、コンテンツを管理しそれを順序付けるためにwpのカテゴリーシステムを使用することは有用です。

これが私がやったことであり、働いています:

私は " get_term_children " - ワードプレス関数の周りに小さな関数を書いた。

function category_has_children( $term_id ){ 
    $children = get_term_children( $term_id, "category" );
    if(is_array($children)){
      return $children;
    } else {
      return false;
    }
}

それからループの前に私のカテゴリページで "category_has_children"があるかどうかをチェックします。

<?php if( category_has_children( $cat ) == false) : ?>

show posts as this is the last child category.

<? endif; ?>
1
Innate