web-dev-qa-db-ja.com

カスタム投稿タイプのカテゴリ、サブカテゴリ、投稿を含むリスト

カスタム投稿タイプのすべてのカテゴリ、サブカテゴリ、投稿を含むリストをクエリしようとしています。

例えば。:

Maincat1
  -Subcat1
     -Post1
     -Post2
  -Subcat2
  -Subcat3
Maincat2
  -Subcat3
     -Post3
Maincat3
  -Post4

私はそれを達成しようとして気が狂っています。私はウェブ上で見つけたものをたくさん試したが、どうやってそれを機能させることができるかわからない。

私がこれまでに持っているもの(働いている)、すべてのカテゴリ+サブカテゴリしかし私はそれがカテゴリ/サブカテゴリから記事を問い合わせる方法をそれを得ない。

<?php

$orderby      = 'name';
$show_count   = 1;      // 1 for yes, 0 for no
$pad_counts   = 1;      // 1 for yes, 0 for no
$hierarchical = 1;      // 1 for yes, 0 for no
$title        = '';
$empty        = 0;

$args = array(
  'taxonomy'     => 'kategorie',
  'orderby'      => $orderby,
  'show_count'   => $show_count,
  'pad_counts'   => $pad_counts,
  'hierarchical' => $hierarchical,
  'title_li'     => $title,
  'hide_empty'   => $empty
);

?>
<?php

$parent_cat_arg = array('hide_empty' => false, 'parent' => 0 );
$parent_cat = get_terms('kategorie',$parent_cat_arg);//category name

foreach ($parent_cat as $catVal) {

    echo '<h3>'.$catVal->name.'</h3>'; //Parent Category

$args = array('post_type' => 'Dokumente',
        'tax_query' => array(
            array(
                'taxonomy' => 'kategorie',
                'field' => 'slug',
                'terms' => $custom_term->slug,
            ),
        ),
     );


$my_query = new WP_Query( $args );

if( $my_query->have_posts() ) {
    while ($my_query->have_posts()) : $my_query->the_post(); ?>
        <ul><li><a href="#" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a><li></ul><?php
    endwhile;
}

wp_reset_query();


    $child_arg = array( 'hide_empty' => false, 'parent' => $catVal->term_id );
    $child_cat = get_terms( 'kategorie', $child_arg );

    echo '<ul>';
        foreach( $child_cat as $child_term ) { 
            echo '<li>'.$child_term->name . '</li>'; //Child Category



$my_query = new WP_Query( $args );

if( $my_query->have_posts() ) {
    while ($my_query->have_posts()) : $my_query->the_post(); ?>
        <ul><li><a href="#" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a><li></ul><?php            
    endwhile;
}

wp_reset_query();
        }
    echo '</ul></li>';

}
?>
</div>
<?php

}

add_shortcode('kategorien', 'get_mylist' );

私は投稿を問い合わせるためのコードも持っています(少なくとも私はそれがうまくいくと思います) - しかし私はそれらを組み合わせる方法を知りません。

$custom_terms = get_terms('kategorie');

foreach($custom_terms as $custom_term) {
wp_reset_query();

$args_slugs = array('post_type' => 'Dokumente',
        'tax_query' => array(
            array(
                'taxonomy' => 'kategorie',
                'field' => 'slug',
                'terms' => $custom_term->slug,
            ),
        ),
     );


     $loop = new WP_Query($args_slugs);
     if($loop->have_posts()) {
        while($loop->have_posts()) : $loop->the_post();
            echo '<ul><li><a href="'.get_permalink().'">'.get_the_title().'</a></li></ul><br>';
        endwhile;
     }
}

私は本当に誰かが私を助けることができることを願っています...そしてはい、私はすでに検索を使用し、同様の質問を見つけたが、答えのどれも私のために働かなかった。

ベスト、NixXxon

2
Niko

@ nikoください、あなたの必要なコードを見つけなさい、それはあなたが探していた正確な出力をあなたに与えるでしょう。私はあなたが大丈夫だったと思います最終的な出力であなたが正しい構造を見逃していた以外は。

また、この構造ではサポートされていないため、投稿を親カテゴリに割り当てないことをお勧めします。しかし、私はそれを達成することができることに従うことでマイナーな調整で考える。

<?php   
    $taxonomy = 'testimonial-category';
    $postType = 'testimonial';
    $terms = get_terms(['taxonomy' => $taxonomy, 'orderby' => 'term_id', 'parent' => 0, 'hide_empty' => false]);
?>
<div class="">
<?php
    foreach($terms as $term){
        echo '<h3>' . $term->name . '</h3>';
        $childTerms = get_terms(['taxonomy' => $taxonomy, 'orderby' => 'term_id', 'parent' => $term->term_id, 'hide_empty' => false]);

        foreach($childTerms as $childTerm)
        {
            $posts = get_posts(array('post_status' =>'publish','post_type' => $postType,
                    array(
                        'taxonomy' => $taxonomy,
                        'field' => 'term_id',
                        'terms' => $childTerm->term_id,
                    ),));
            ?>
            <div class="add-accordion">
                <h3><?php echo $childTerm->name ?></h3>
                <div class="add-accordion">
                    <?php foreach($posts as $post){ ?>
                        <h3><?php echo $post->post_title ?></h3>
                        <div class="">
                            <?php echo get_the_content($post->ID) ?>
                        </div>
                    <?php } ?>
                </div>
            </div>
            <?php
        }
    }
?>
</div>
<script>
    jQuery(function(){
        jQuery('.add-accordion').accordion({
            collapsible: true,
            heightStyle: "content",
            active: false,
            animate: 500,
            icons: false
        });
    });
</script>
<?php wp_enqueue_script('jquery-ui-accordion'); ?>
1
BlueSuiter

すべてのカテゴリ、サブカテゴリ、および各サブカテゴリ内の投稿のリストを表示するには、このコードを使用します。より明確にするために、必ず独自の分類法と投稿の種類で引数を変更し、コード内のコメントを読んでください。

function ow_categories_with_subcategories_and_posts( $taxonomy, $post_type ) {

    // Get the top categories that belong to the provided taxonomy (the ones without parent)
    $categories = get_terms( 
        array(
            'taxonomy'   => $taxonomy,
            'parent'     => 0, // <-- No Parent
            'orderby'    => 'term_id',
            'hide_empty' => true // <!-- change to false to also display empty ones
        )
    );
    ?>
    <div>
        <?php
        // Iterate through all categories to display each individual category
        foreach ( $categories as $category ) {

            $cat_name = $category->name;
            $cat_id   = $category->term_id;
            $cat_slug = $category->slug;

            // Display the name of each individual category
            echo '<h3>Category: ' . $cat_name . ' - ID: ' . $cat_id . ' - Slug: ' . $cat_slug  . '</h3>'; 


            // Get all the subcategories that belong to the current category
            $subcategories = get_terms(
                array(
                    'taxonomy'   => $taxonomy,
                    'parent'     => $cat_id, // <-- The parent is the current category
                    'orderby'    => 'term_id',
                    'hide_empty' => true
                )
            );
            ?>
            <div>
                <?php
                // Iterate through all subcategories to display each individual subcategory
                foreach ( $subcategories as $subcategory ) {

                    $subcat_name = $subcategory->name;
                    $subcat_id   = $subcategory->term_id;
                    $subcat_slug = $subcategory->slug;

                    // Display the name of each individual subcategory with ID and Slug
                    echo '<h4>Subcategory: ' . $subcat_name . ' - ID: ' . $subcat_id . ' - Slug: ' . $subcat_slug  . '</h4>';

                    // Get all posts that belong to this specific subcategory
                    $posts = new WP_Query(
                        array(
                            'post_type'      => $post_type,
                            'posts_per_page' => -1, // <-- Show all posts
                            'hide_empty'     => true,
                            'order'          => 'ASC',
                            'tax_query'      => array(
                                array(
                                    'taxonomy' => $taxonomy,
                                    'terms'    => $subcat_id,
                                    'field'    => 'id'
                                )
                            )
                        )
                    );

                    // If there are posts available within this subcategory
                    if ( $posts->have_posts() ):
                        ?>
                        <div>
                            <?php

                            // As long as there are posts to show
                            while ( $posts->have_posts() ): $posts->the_post();

                                //Show the title of each post with the Post ID
                                ?>
                                <p>Post: <?php the_title(); ?> - ID: <?php the_ID(); ?></p>
                                <?php

                            endwhile;
                            ?>
                        </div>
                        <?php
                    else:
                        echo 'No posts found';
                    endif;

                    wp_reset_query();
                }
                ?>
            </div>
            <?php
        }
        ?>
    </div>
    <?php
}
ow_categories_with_subcategories_and_posts( 'name_of_your_taxonomy', 'name_of_your_post_type' );
0
drjorgepolanco