it-swarm.com.de

Gruppieren Sie benutzerdefinierte Posts, indem Sie eine Seite nach ihrem Taxonomie-Tag eintippen

Ich hoffe, ich kann eine klare Frage schreiben, da ich verwirrt war, als ich versuchte, diese zu lösen ...

Ich habe einen benutzerdefinierten Post-Typ ... dieser benutzerdefinierte Post-Typ hat Taxomony (Kategorie wie)
und ich möchte eine Struktur wie diese zurückgeben auf einer Seite, die alle Beiträge von
dieser Beitragstyp ..

--------------------------------------------- Gewünschte Struktur

taxomony-Kategoriename (Beispiel: New York)
- post one (mit new york kategorie verbunden)
- Posten zwei (mit New York Kategorie verbunden)
- post drei (mit new york kategorie verbunden)

taxomony-Kategoriename (Beispiel: Washington DC)
- Post One (zusammen mit der Kategorie Washington DC)
- Posten zwei (verbunden mit der Kategorie Washington DC)
- nach drei (zusammen mit der Kategorie Washington DC)
- nach vier (zusammen mit der Kategorie Washington DC)
- Post Five (zusammen mit der Kategorie Washington DC)

taxomony-Kategoriename (Beispiel: SomeCity)
- post one (zugeordnet zu SomeCity Kategorie)
- post zwei (mit SomeCity Kategorie verbunden)

Dies ist der Code, den ich jetzt habe:

        <div class="pageContent portfolioPage">

            <!--=STR== PAGE TITLE ===-->
            <?php if (have_posts()) : ?>
            <?php while (have_posts()) : the_post(); ?>   
                <h1 id="post-<?php the_ID(); ?>"><?php the_title(); ?></h1>
                <?php the_content(); ?>
            <?php endwhile; endif; ?>
            <!--=END== PAGE TITLE ===-->

            <!--=STR== OUR CLIENTS ===-->                   
            <?php 
            /*
                query_posts(array( 
                    'post_type' => 'vacationrental',
                    'showposts' => 100
                ) );  
            */
            $loop = new WP_Query( array( 
            'post_type' => 'vacationrental',
            'post_per_page' => 100,
            'orderby' => 'date',
            'order' => 'ASC'
            ));             

            ?>


            <?php while ($loop->have_posts()) : $loop->the_post(); ?>
                <div class="vacationRentalBox">
                    <div class="vacationRentalBox-inner">

                        <?php
                        $image_id = get_post_thumbnail_id();  
                        $image_url = wp_get_attachment_image_src($image_id,'large');  
                        $image_url = $image_url[0];  
                        // $googleMapsUrl = get_post_meta( $post->ID, 'vacationrental_map', true ); // GOOGLE MAPS URL
                        ?>              

                        <div class="vacationRentalBar">
                            <div class="vacationRentalName"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></div> 

                            <div class="thumbsingle">
                            <a title="<?php the_title(); ?>" href="<?php echo $image_url; ?>" class="lightbox"><?php the_post_thumbnail('testimonialPage'); ?></a>
                            </div>      

                            <div class="vacationRentalDescription"><?php dynamic_excerpt(315); ?></div> 

                            <div class="vacationRentalExtraInfo">
                                <div class="vacationRentalReadMore"><a href="<?php the_permalink(); ?>" rel="nofollow"><?php _e('Read More &rarr;' ,'sagive'); ?></a></div>                             
                            </div>
                            <br style="clear: both;" />
                        </div>

                    </div>
                </div>

            <?php endwhile;?>
            <!--=END== OUR CLIENTS ===-->                           

            <br style="clear: both;" />
        </div>

.
Ich habe es geschafft, die Liste der Taxomonies-Kategorien folgendermaßen abzurufen:

$terms = get_terms("locations");
$count = count($terms);
if ( $count > 0 ){
    echo "<ul>";
    foreach ( $terms as $term ) {
    echo "<li>" . $term->name . "</li>";

    }
    echo "</ul>";
}

Aber ich weiß nicht, wie ich das in die Schleife/Struktur integrieren soll. Würde mich sehr über Ihre Hilfe freuen, da ich feststecke.

2
Sagive SEO

Wenn ich Ihrer Frage richtig folge, könnten Sie eine verschachtelte Abfrageschleife verwenden, die Ihre Taxonomiebegriffe durchläuft und dann für jeden eine WP_Query-Schleife durchführt.

Es gibt einen komplizierteren Ansatz mit benutzerdefiniertem SQL und einem Filter, aber das folgende Beispiel würde ich anstreben:

$terms = get_terms("locations");
$count = count($terms);
if ( $count > 0 ){
    foreach ( $terms as $term ) {
        echo '<h2>' . $term->name . '</h2>';
        echo '<ul>';
        $loop = new WP_Query( array( 
            'post_type' => 'vacationrental',
            'post_per_page' => 100,
            'orderby' => 'date',
            'order' => 'ASC',
            'tax_query' => array(
                array(
                    'taxonomy' => 'locations',
                    'field' => 'id',
                    'terms' => $term->term_id
                )
            )
        ));
        // the loop
        while ($loop->have_posts()) : $loop->the_post();
            // do loop content
            echo '<li>' . get_the_title() . '</li>';
        endwhile;
        // reset $post so that the rest of the template is in the original context
        wp_reset_postdata();
        echo '</ul>';
    }
}
4
sanchothefat

oK, das ist alt und Sie haben eine Lösung, aber ich habe versucht, das gleiche zu tun. Hier ist, wie ich es geschafft habe, w/SQL Voodoo von ein paar Stellen zusammen gepatcht, aber meistens:

Mit wp_query ist es möglich, nach Taxonomie zu bestellen? und

Gruppieren von benutzerdefinierten Beitragstypen nach benutzerdefinierten Taxonomiebegriffen

zuerst die Abfrage Voodoo:

function wpa_38075( $clauses, $wp_query ) {
    global $wpdb;

    if( !is_post_type_archive( 'vacationrental' )) return $clauses;


        //join term_relationships to posts, and term_relationships to term_taxonomy and term_taxonomy to terms
        $clauses['join'] .= "LEFT OUTER JOIN {$wpdb->term_relationships} ON {$wpdb->posts}.ID={$wpdb->term_relationships}.object_id
LEFT OUTER JOIN {$wpdb->term_taxonomy} USING (term_taxonomy_id)
LEFT OUTER JOIN {$wpdb->terms} USING (term_id)" ;

        //look for posts with and without a subject term
        $clauses['where'] .= " AND (taxonomy = 'locations' OR taxonomy IS NULL)";

        $clauses['groupby'] = "object_id";

        //remove limits
        $clauses['limits'] = "";

        //group posts by term name
        $clauses['orderby']  = "GROUP_CONCAT({$wpdb->terms}.name ORDER BY name ASC) ";

    return $clauses;
}


add_filter( 'posts_clauses', 'wpa_38075', 10, 2 );

und dann in deiner Vorlage:

<?php 

$prev = ''; //not set yet

if (have_posts()) :

    echo "<ul>";

while ( have_posts() ) : the_post();  


    $subhead =  array_shift(wp_get_post_terms(get_the_ID(), 'subject', array("fields" => "names")));
    $subhead = $subhead ? $subhead : __('Uncategorized','yourtextdomain');

    if($subhead != $prev) { ?>
        <h3 class="subhead"><?php echo $subhead;?></h3>
    <?php } ?>

    <li><a href="<?php echo get_permalink();?>" title="<?php echo __('Permalink to', 'peterwade') . ' ' . get_the_title();?>"><?php the_title();?></a></li>

    <?php 

    $prev = $subhead; //cache the previous tax term

endwhile; 
echo "</ul>";
endif;
?>
1
helgatheviking