web-dev-qa-db-ja.com

親カテゴリの子を取得する

このループにすべての子カテゴリを表示させようとしていますが、コードに苦労しています。これが私のこれまでのところです。

<?php $args=array('orderby' => 'name', 'order' => 'ASC');
    $categories=get_categories($args); 
    foreach ($categories as $cat) { ?>
    <dt><a href="#" class="customer-acquisitiontop" id="<?php echo $cat->slug; ?>" data-filter=".<?php echo $cat->slug; ?>"><h2><?= $cat->cat_name; ?></h2></a></dt>
    <dd><div class="services">
    <?= $categories=get_categories('parent'); ?> /*This should be the children of the parent category */
    </div>
    </dd>
<?php } ?>

任意の助けは素晴らしいだろう

15
Chris Da Sie

文字列 "parent"を get_categories に渡すだけではいけません。あなたは親のIDを渡さなければなりません。

$categories=get_categories(
    array( 'parent' => $cat->cat_ID )
);

2つの 似ているが等しくない "get child"パラメータ があることに注意してください。

child_of(integer)IDで識別されるカテゴリの子孫(つまり子供と孫)であるすべてのカテゴリを表示します。このパラメータにはデフォルトはありません。このパラメータを使用すると、hide_emptyパラメータはfalseに設定されます。

parent(integer)IDで識別されるカテゴリの直接の子孫であるカテゴリ(つまり子のみ)を表示します。これは 'child_of'パラメータのようには動作しません。このパラメータにはデフォルトはありません。 [2.8.4に]

今度は$categoriesをループする必要があります。あなたはただ配列をエコーすることはできません。

foreach ($categories as $c) {
    var_dump($c);
    // what you really want instead of var_dump is something to
    // to create markup-- list items maybe, For example...
    echo '<li>'.$c->cat_name.'</li>';
}
17
s_ha_dum

下記のarchive.phpファイルのコードを使用してください。このコードはあなたを助けます:

<?php

    $term = get_queried_object();

    $children = get_terms( $term->taxonomy, array(
        'parent'    => $term->term_id,
        'hide_empty' => false
    ) );

    if ( $children ) { 
        foreach( $children as $subcat )
        {
            echo '<li><a href="' . esc_url(get_term_link($subcat, $subcat->taxonomy)) . '">' . $subcat->name . '</a></li>';
        }
    }
?>
2
Violla Queue