Durchlaufen Sie benutzerdefinierte Taxonomien und zeigen Sie Beiträge an

7

Während ich dies für normale WP-Kategorien zum Laufen bringen konnte, konnte ich es für benutzerdefinierte Taxonomien nicht zum Laufen bringen.

Ich möchte jede benutzerdefinierte Taxonomie (in meinem Fall Kategorien) durchlaufen und für jede eine Reihe von Posts erstellen.

Ein Beispiel für die Ausgabe wäre:

Category 1

post from category one
post from category one

read more category one


Category 2

post from category two
post from category two

read more category two

Natürlich würde sich jede verfügbare Taxonomie für den benutzerdefinierten Beitragstyp wiederholen.

Curtismchale
quelle
Ich verstehe Ihre Frage nicht ganz. Wenn Sie nach "Durchlaufen jeder benutzerdefinierten Taxonomie" fragen, meinen Sie damit "Durchlaufen der Begriffe jeder benutzerdefinierten Taxonomie"? Wenn Sie nach "mehrere Posts erstellen" fragen, bedeutet "produzieren" auch das Einfügen neuer Instanzen eines Post-Typs in die Datenbank oder das Generieren von HTML für den Post-Typ?
MikeSchinkel

Antworten:

9

Ich dachte, ich würde eine andere Antwort geben, da die obige ein wenig hackig ist. Außerdem habe ich eine weitere Ebene hinzugefügt, die alle Taxonomien für einen post_type erhält.

$post_type = 'post';

// Get all the taxonomies for this post type
$taxonomies = get_object_taxonomies( (object) array( 'post_type' => $post_type ) );

foreach( $taxonomies as $taxonomy ) : 

    // Gets every "category" (term) in this taxonomy to get the respective posts
    $terms = get_terms( $taxonomy );

    foreach( $terms as $term ) : 

        $posts = new WP_Query( "taxonomy=$taxonomy&term=$term->slug&posts_per_page=2" );

        if( $posts->have_posts() ): while( $posts->have_posts() ) : $posts->the_post();
            //Do you general query loop here  
        endwhile; endif;

    endforeach;

endforeach;

Es wird empfohlen, jeden gefundenen Beitrag einem $post__not_inArray hinzuzufügen , damit Sie ihn an das übergeben können, um WP_Queryzu verhindern, dass doppelte Beiträge eingehen.

Joe Hoyle
quelle
1

Suchst du das

<?php query_posts(array('post_type' => 'post type name', 'Taxonomy slug' => $term->slug ) ); ?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<?php endwhile; else: ?>
<p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
<?php endif; ?>

So erstellen Sie eine benutzerdefinierte Taxonomieschleife

Hoffe es wird helfen

Maidul
quelle
0

Kopieren Sie diese Funktion und fügen Sie sie in Ihre functions.php ein

if ( ! function_exists( 'display_all_products_from_all_categories' ) ) {

    function display_all_products_from_all_categories() {

        // Get all the categories for Custom Post Type Product
        $args = array( 
            'post_type' => 'product', 
            'orderby' => 'id', 
            'order' => 'ASC' 
        );

        $categories = get_categories( $args );

        foreach ($categories as $category) {
            ?>
            <div class="<?php echo $category->slug; ?>">
                <!-- Get the category title -->
                <h3 class="title"><?php echo $category->name; ?></h3>

                <!-- Get the category description -->
                <div class="description">
                    <p><?php echo category_description( get_category_by_slug($category->slug)->term_id ); ?></p>
                </div>

                <ul class="mhc-product-grid">

                    <?php
                        // Get all the products of each specific category
                        $product_args = array(
                            'post_type'     => 'product',
                            'orderby'      => 'id',
                            'order'         => 'ASC',
                            'post_status'   => 'publish',
                            'category_name' => $category->slug //passing the slug of the current category
                        );

                        $product_list = new WP_Query ( $product_args );

                    ?>

                    <?php while ( $product_list -> have_posts() ) : $product_list -> the_post(); ?>

                        <li class="product <?php the_field( 'product_flavor' ); ?>">
                            <a href="<?php the_permalink(); ?>" class="product-link">

                                <!-- if the post has an image, show it -->
                                <?php if( has_post_thumbnail() ) : ?>
                                    <?php the_post_thumbnail( 'full', array( 'class' => 'img', 'alt' => get_the_title() ) ); ?>
                                <?php endif; ?>

                                <!-- custom fields: product_flavor, product_description ... -->
                                <h3 class="title <?php the_field( 'product_flavor' ); ?>"><?php the_title(); ?></h3>
                                <p class="description"><?php the_field( 'product_description' ); ?></p>
                            </a>
                        </li>

                    <?php endwhile; wp_reset_query(); ?>
                </ul>

            </div>
            <?php
        }
    }
}

Rufen Sie es dann von überall in Ihrer Vorlage auf mit:

display_all_products_from_all_categories();
drjorgepolanco
quelle
-1

Bitte überprüfen Sie dieses Beispiel; Erstellen Sie eine eigene Schleife für Ihre Taxonomie. Sie können dies auch in einer foreach-Schleife verwenden, um alle Kategorien zu verwenden. Oder Sie müssen eine eigene SQL-Abfrage erstellen.

<?php
$taxonomies = get_the_term_list($post->ID, 'YOUR_TAXONOMIE', '', '', '');
$taxonomies = explode('>', $taxonomies);
$taxonomies = $taxonomies[1];
$myq = new WP_Query('your_taxonomie = '.$taxonomies); 
if ($myq->have_posts()) : while ($myq->have_posts()) : $myq->the_post(); // the loop ?>

            <?php the_title();?>
            <?php the_content();?>

<?php endwhile; else:?>

<?php endif;?>
bueltge
quelle