• Rozwiązano combi

    (@combinesom)


    Mam taki oto problem – Zrobiłem stronę używając Custom Post Type. Utworzyłem kategorie wraz z podkategoriami i dodałem do nich posty. Teraz na jednej stronie chcę to wszystko pokazać. Poniższy kod wyrzuca mi wszystko ale nie do końca tak jakbym chciał, otóż jest problem z nadrzędnymi kategoriami ponieważ ten skrypt wyrzuca wszystkie posty należące też do podkategorii zawartych w poszczególnych kategoriach nadrzędnych. Gdyby to były zwykłe wpisy można by użyć funkcji in_category żeby ograniczyć wynik zapytania tylko do kategorii nadrzędnej (bez postów w podkategoriach) ale to są Custom Post Type i tu ta funkcja nie działa. Jak zastąpić funkcję in_category w tych Custom Post Typach??

    Poniżej mój kod:

    <?php
    $categories = get_terms('kategoria-pozycji',array('parent' => 0 , 'hide_empty'=> '0' ));
    
    foreach ( $categories as $category ) {
    
    if ( $category->parent > 0 ) {
        continue;
    }
    
    $i = 0;
    echo '<h1 style="font-weight:bold">' . $category->name . '</h1>';
    
    $posts = get_posts( array( 'kategoria-pozycji' => $category->name, 'post_type' => 'biblioteka' ) );
    echo '<ul>';
    foreach ( $posts as $post ) {
    
        $child_categories = get_term_children( $category->term_id, 'kategoria-pozycji' );
    
        if ( $child_categories && in_category( $child_categories, $post->ID ) ) {
            continue;
        }
    
    setup_postdata($post);
    echo '<li>'; the_title();   echo '</li>';
    }
     echo '</ul>';
    
    $categories2 = get_terms('kategoria-pozycji',array('parent' => $category->term_id , 'hide_empty'=> '0' ));
    
    foreach ( $categories2 as $category ) {
    
        $j = 0;
        echo '<h2>' . $category->name . '</h2>';
    
    $posts = get_posts( array( 'kategoria-pozycji' => $category->name, 'post_type' => 'biblioteka' ) );  
    
    echo '<ul>';
    foreach($posts as $post) :
    setup_postdata($post);  
    
    echo '<li>'; the_title();   echo '</li>';
    								endforeach;
    echo '</ul>';
    
    }
    }
    ?>
Zobacz 1 odpowiedź (z 1 wszystkich)
  • Twórca wątku combi

    (@combinesom)

    ok, znalazłem rozwiązanie!

    <?php
    
    $args=array(
    'post_type'                => 'biblioteka',
    'child_of'                 => 0,
    'parent'                   => '',
    'orderby'                  => 'name',
    'order'                    => 'ASC',
    'hide_empty'               => 1,
    'hierarchical'             => 1,
    'exclude'                  => '',
    'include'                  => '',
    'number'                   => '',
    'taxonomy'                 => 'kategoria-pozycji',
    'pad_counts'               => false
    );
    
    $categories=get_categories($args);
    
    foreach ( $categories as $category ) {
    
    if ( $category->parent > 0 ) {
    continue;
    }
    
    echo '<h1 style="font-weight:bold">' . $category->name . '</h1>';
    
    $querystr = "SELECT $wpdb->posts.*
                  FROM $wpdb->posts, $wpdb->term_relationships, $wpdb->terms
                  WHERE term_id = (" . $category->cat_ID . ")
                  AND term_taxonomy_id = (" . $category->term_taxonomy_id . ")
                  AND ID = object_id
                  AND post_type = 'biblioteka'
                  AND post_status = 'publish'
                  ORDER BY post_date DESC";
    $posts = $wpdb->get_results($querystr, OBJECT);
    
    echo '<ul>';
        foreach ( $posts as $post ) {
            setup_postdata($post);  
    
                echo '<li>'; the_title();   echo '</li>';
    
                }
    echo '</ul>';
    
    $categories2 = get_terms('kategoria-pozycji',array('parent' => $category->term_id , 'hide_empty'=> '0' ));
    
    foreach ( $categories2 as $category ) {
    
    echo '<h2>' . $category->name . '</h2>';
    
    $posts = get_posts( array( 'kategoria-pozycji' => $category->name, 'post_type' => 'biblioteka' ) );  
    
    echo '<ul>';
        foreach($posts as $post) {
            setup_postdata($post);  
    
                echo '<li>'; the_title();   echo '</li>';
    
                }
    echo '</ul>';
    
    }
    }
    
    ?>
Zobacz 1 odpowiedź (z 1 wszystkich)

Temat ‘Drzewo kategorii i podkategorii oraz tytuły postów (custom post type)’ jest zamknięty na nowe odpowiedzi.