Loop attraverso tassonomie personalizzate e messaggi di visualizzazione
-
16-10-2019 - |
Domanda
Mentre io sono stato in grado di ottenere questo lavoro per le normali categorie WP sono stato in grado di farlo funzionare per tassonomie personalizzate.
Mi piacerebbe ciclo attraverso ogni tassonomia personalizzati (categorie nel mio caso) e produrre un numero di posti per ciascuna.
Un esempio di output potrebbe essere:
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
Naturalmente sarebbe ripetere attraverso qualsiasi tassonomia disponibili per il tipo di messaggio personalizzato.
Soluzione
ho pensato di fornire un'altra risposta, come quello superiore è un po 'hacky, anche ho aggiunto un altro strato che ottiene tutte le tassonomie per un post_type.
$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;
Si sarebbe consigliabile aggiungere ogni post trovato a un array $post__not_in
, così si potrebbe passare che per il WP_Query
per evitare che i messaggi duplicati che passa.
Altri suggerimenti
Sei alla ricerca di questo?
<?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; ?>
Come creare personalizzato Tassonomia ciclo
La speranza che aiuterà
Copia e incolla questa funzione nel vostro functions.php
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
}
}
}
Quindi chiamare da qualsiasi luogo nel modello con:
display_all_products_from_all_categories();
Si prega di verificare questo esempio; creare un proprio ciclo per il vostro Taxonomie. È inoltre possibile utilizzare questo in un foreach loop di utilizzare tutte le categorie. Oppure è necessario creare un proprio sql-query.
<?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;?>