wake-up-neo.net

Wie sortiere ich die Liste der verwendeten Beiträge, um eine Ansicht wie eine Baumstruktur der Beiträge unter Kategorien und deren Kinderkategorien zu erhalten?

Ich bin neu hier und mein Englisch ist nicht perfekt, also tut mir das leid :) Ich bin hier, weil ich vor Ort mit einer nach Kategorien sortierten Beitragsliste arbeite und ich Probleme habe, meine Beiträge in Kategorien und zu sortieren Kinderkategorien unter ihnen. Jetzt ist alles durcheinander. Ich möchte meine benutzerdefinierten Beiträge wie folgt sortieren:

KATEGORIE 1

  • KINDERKATEGORIE 1

    • Post
    • Post
    • Post
  • KINDERKATEGORIE2

    • Post
    • Post
    • Post

KATEGORIE 2

  • KINDERKATEGORIE3
    • Post
    • Post
    • Post

KATEGORIE 3

  • Post
  • Post

  • KINDERKATEGORIE4

    • Post
    • Post
    • Post

Ist es mit diesem Code möglich:

<?php
$querystr = "SELECT terms.* FROM $wpdb->term_taxonomy tax LEFT JOIN $wpdb->terms terms ON       tax.term_id = terms.term_id WHERE tax.taxonomy = 'MY_CUSTOM_TAXONOMY'";

$categories = $wpdb->get_results($querystr, OBJECT);

foreach( $categories as $category ): 
echo '<div class="category-header"><h3>'.$category->name.'</h3>';  
echo '<p class="category-description">'.strip_tags(term_description($category->term_id,'MY_CUSTOM_TAXONOMY')).'</p></div>';  

$posts = get_posts( array( 'MY_CUSTOM_TAXONOMY' => $category->name, 'post_type' => 'MY_CUSTOM_POST' ) );  
foreach($posts as $post) :  
setup_postdata($post);  

 the_title();   

endforeach;

endforeach;
?>

Ich werde für jede Hilfe dankbar sein, danke !!

3
combi

ok, das ist meine funktionierende Lösung:

<?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>';

}
}

?>
1
combi

Meine beste Lösung! (funktioniert für alle Taxonomien, einschließlich "Kategorie")

$your_taxonomy='category';

function my_Categ_tree($TermName='', $termID, $separator='', $parent_shown=true ){
    $args = 'hierarchical=1&taxonomy='.$TermName.'&hide_empty=0&orderby=id&parent=';
            if ($parent_shown) {$term=get_term($termID , $TermName); $output=$separator.$term->name.'('.$term->term_id.')<br/>'; $parent_shown=false;}
    $separator .= '-';  
    $terms = get_terms($TermName, $args . $termID);
    if(count($terms)>0){
        foreach ($terms as $term) {
            //$selected = ($cat->term_id=="22") ? " selected": "";
            //$output .=  '<option value="'.$category->term_id.'" '.$selected .'>'.$separator.$category->cat_name.'</option>';
            $output .=  $separator.$term->name.'('.$term->term_id.')<br/>';
            $output .=  my_Categ_tree($TermName, $term->term_id, $separator, $parent_shown);
        }
    }
    return $output;
}

Dann können Sie ausgeben:

1) Zielkategoriebaum (Taxonomiebaum) unter Verwendung einer bestimmten ID

echo my_Categ_tree($your_taxonomy, 0 );

2) Alle Kategorien/Taxonomien

foreach (get_terms($your_taxonomy, array('hide_empty'=>0, 'parent'=>0)) as $each) {
    echo my_Categ_tree($each->taxonomy,$each->term_id);
}
1
T.Todua

Hier ist die Lösung, die ich die Probleme gelöst habe, wie Sie erfahren haben

            //Define Some require
            define(TAX_TYPE, 'category'); //you can also replace your custom taxonomy in category
            $terms = get_terms(TAX_TYPE); 
            define(WP_HOME, 'http://yourdomain.com');


        ?>
        <div class="menu-tours-container">
            <ul id="menu-tours" class="menu">
                <?php 
                    foreach( $terms as $tax_term ) : 

                    $permalink = WP_HOME . '/' . TAX_TYPE . '/' . $tax_term->slug;

                    // getting posts from each tour type
                    $args=array(
                        'post_type'     => 'tour',
                        'post_status'   => 'publish',
                        'order_by'      => 'post_title',
                        'order'         => 'ASC',
                        'tour-type'    => $tax_term->slug
                    );
                    $posts = get_posts($args);

                ?>                        
                    <li>
                        <div class="block-title">
                            <h4><?php echo $tax_term->name; ?></h4>
                        </div>
                        <ul class="check">
                            <?php foreach ($posts as $post) : ?>
                            <li><a href="<?php echo get_permalink($post->ID); ?>"><?php echo $post->post_title; ?></a></li>
                            <?php endforeach; ?>
                        </ul>
                    </li>                 
                <?php endforeach; ?>
            </ul> <!--#menu-tours-->

        </div>
0
por

Ich habe ein bisschen gespielt und das habe ich mir ausgedacht, getestet und es funktioniert genauso wie in deinem Beispiel:

<ul>
<?php

// get initial categories
$categories = get_categories();

foreach ( $categories as $category ) {

// we don't want child categories now, and since get_categories does not support 'depth' parameter, we use ->parent check
if ( $category->parent > 0 ) {
    continue;   
}

$i = 0;
echo '<li>' . $category->cat_name . '</li>';

$posts = get_posts(
    array(
        'category' => $category->term_id
    )
);

foreach ( $posts as $post ) {

    // let's make sure that the post is not also in any of child categories, if it is, skip it ( we don't want to display it twice )
    $child_categories = get_term_children( $category->term_id, 'category' );

    if ( $child_categories && in_category( $child_categories, $post->ID ) ) {
        continue;
    }

    echo 0 === $i ? '<ul>' : '';
    echo '<li>' . $post->post_title . '</li>';
    $i++;

}

// now, after we listed all the posts, we query for child categories
$categories2 = get_categories(
    array(
        'parent' => $category->term_id
    )
);

foreach ( $categories2 as $category ) {

    $j = 0;
    echo '<li>' . $category->cat_name . '</li>';
    $posts2 = get_posts(
        array(
            'category' => $category->term_id
        )
    );

    foreach ( $posts2 as $post ) {

        echo 0 === $j ? '<ul>' : '';
        echo '<li>' . $post->post_title . '</li>';
        $j++;
    }

    echo null === $posts2 ? '' : '</ul>';

}

echo null === $posts ? '' : '</ul>';

}

?>
</ul>
0
OriginalEXE