web-dev-qa-db-ja.com

カテゴリ階層を反映した多次元配列を取得する

タイトルはほとんどすべてを言っています。与えられたカテゴリ階層を反映しているWordPressカテゴリの多次元PHP配列を取得するにはどうすれば可能ですか。

1
GDY

そのため、WordPress get_categories と同じように使用できる関数がありますが、階層配列を返します。このために、各child_categoriesオブジェクトにWP_TERMプロパティが追加されています。

function get_categories_hierarchical( $args = array() ) {

    if( !isset( $args[ 'parent' ] ) ) $args[ 'parent' ] = 0;

    $categories = get_categories( $args );

    foreach( $categories as $key => $category ):

        $args[ 'parent' ] = $category->term_id;

        $categories[ $key ]->child_categories = get_categories_hierarchical( $args );

    endforeach;

    return $categories;

}

この関数は、たとえば次のように使用できます(カテゴリ階層の最初の2つのレベルからHTML選択入力の行を作成するため)。

<?php if( $categories = get_categories_hierarchical() ): foreach( $categories as $category ): ?>

    <label for="filter_cat_<?php echo $category->term_id; ?>"><?php echo $category->name; ?></label>

    <select name="filter_cat_<?php echo $category->term_id; ?>" id="filter_cat_<?php echo $category->term_id; ?>">

        <?php if( $category->child_categories ) foreach( $category->child_categories as $subcategory ): ?>

            <option value="<?php echo $subcategory->term_id; ?>"<?php if( $_GET[ 'filter_cat_' . $category->term_id ] == $subcategory->term_id ) echo ' selected'; ?>><?php echo $subcategory->name; ?></option>

        <?php endforeach; ?>

    </select>

<?php endforeach; endif; ?>

また、 wp_dropdown_categories および wp_list_categories をチェックすると、追加の機能を必要とせずに、必要なことをすでに実行できます。

2
GDY