J'ai plusieurs types de messages personnalisés qui utilisent la même taxonomie. Appelons le "lieu" et "l'histoire" du CPT et disons que nous les avons classés dans la catégorie "foo".
J'ai déjà le code suivant pour m'assurer qu'ils font partie des boucles de taxonomie:
//make sure these custom post types are registered for taxonomy queries
add_filter('pre_get_posts', 'query_post_type');
function query_post_type($query) {
if(is_category() || is_tag()) {
$post_type = get_query_var('post_type');
if($post_type)
$post_type = $post_type;
else
$post_type = array('nav_menu_item', 'venue', 'story'); // don't forget nav_menu_item to allow menus to work!
$query->set('post_type',$post_type);
return $query;
}
}
Lorsque je visite exemple.com/category/foo, category.php est activé. Ce que j'aimerais voir, c'est:
La page commence et affiche une image personnalisée, le titre, la phrase principale
Un titre 3x titres de la 'salle', catégorie foo
Un titre 6x articles de la "histoire", catégorie foo
Pagination, pied de page
Voici category.php: (également à: https://Gist.github.com/anonymous/b747a2c51bc5bb7a58dd )
<?php
/**
* The template for displaying category pages.
*
* Learn more: http://codex.wordpress.org/Template_Hierarchy
*
* @package DW Focus
* @since DW Focus 1.0
*/
get_header(); ?>
<?php
// vars
$queried_object = get_queried_object();
$taxonomy = $queried_object->taxonomy;
$image = get_field('category_image', $queried_object);
$lead = get_field('category_lead', $queried_object);
?>
<div id="primary" class="site-content category span12">
<?php
if( !empty($image) ): ?>
<div id="featured_image_category" style="height:200px;">
<img src="<?php echo $image['url']; ?>" alt="<?php echo $image['alt']; ?>" />
</div>
<?php endif; ?>
<div class="content-bar row-fluid">
<h1 class="page-title"><?php printf( __( '%s articles', 'dw-focus' ), '<span>' . single_cat_title( '', false ) . '</span>' ); ?></h1>
</div>
<?php if( !empty($lead) ): ?>
<div class="lead"><p><?php echo $lead; ?></p></div>
<?php endif; ?>
<h2 style="text-align: center;">Luxury and Boutique Hotels in <?php printf( __( '%s', 'dw-focus' ), '<span>' . single_cat_title( '', false ) . '</span>' ); ?></h2>
<?php get_template_part( 'content', 'venueloop'); ?>
<div class="clearfix"></div>
<h2 style="text-align: center;">Explore <?php printf( __( '%s', 'dw-focus' ), '<span>' . single_cat_title( '', false ) . '</span>' ); ?> with our unique travel experiences</h2>
<?php get_template_part( 'content', 'storyloop' ); ?>
<div class="clearfix"></div>
<?php dw_focus_pagenavi(); ?>
</div>
<?php get_footer(); ?>
Partie de contenu pour la boucle venueeloop et story (également à https://Gist.github.com/indietravel/38ed27762fb844eee0a5 ):
<div class="content-inner">
<?php
if ( is_category() ) {
$cat = get_query_var('cat');
$ourcat = get_category ($cat);
$category_selected = $ourcat->slug;
}
$args = array (
'post_type' => 'story',
'post_status' => 'publish',
'posts_per_page' => '6',
'category_name' => $category_selected,
);
// The Query
$cat_query = new WP_Query( $args );
?>
<?php if ( $cat_query -> have_posts() ) : ?>
<?php global $archive_i; $archive_i = 1 ?>
<?php while ( $cat_query -> have_posts() ) : $cat_query -> the_post(); ?>
<?php get_template_part('content', 'archive'); ?>
<?php $archive_i; ?>
<?php endwhile; ?>
<?php endif;
wp_reset_postdata(); // ADAPTED FOR CUSTOM POST TYPES
wp_reset_query();
?>
</div>
Boucle de lieu:
<?php
// WP_Query arguments
$args = array (
'post_type' => 'venue',
'post_status' => 'publish',
'pagination' => false,
'posts_per_page' => '3',
);
// The Query
$venue_query = new WP_Query( $args );
// The Loop
if ( $venue_query->have_posts() ) {
while ( $venue_query->have_posts() ) {
$venue_query->the_post();
the_title();
}
} else {
// no posts found
}
// Restore original Post Data
wp_reset_postdata();
?>
Pour une raison quelconque, le résultat est que la page affiche toujours,
La page commence et affiche une image personnalisée, le titre, la phrase principale
Un titre 3x titres du CPT 'venue' & 'story', catégorie foo
Un titre 3x titres du CPT 'venue' & 'story', catégorie foo
Pagination, pied de page
Solution:
//make sure these custom post types are registered for taxonomy queries
add_filter('pre_get_posts', 'query_post_type');
function query_post_type($query) {
if(is_category() || is_tag()) {
$post_type = get_query_var('post_type');
if($post_type)
$post_type = $post_type;
else
$post_type = array('nav_menu_item', 'venue', 'story'); // don't forget nav_menu_item to allow menus to work!
$query->set('post_type',$post_type);
return $query;
}
}
filtre les résultats (avant? après?) la requête dans le modèle. En tant que tel, il supprimait complètement les demandes d'utilisation du type de message demandé. Changé en
//make sure these custom post types are registered for taxonomy queries
add_filter('pre_get_posts', 'query_post_type');
function query_post_type($query) {
if( is_tag() ) {
$post_type = get_query_var('post_type');
if($post_type)
$post_type = $post_type;
else
$post_type = array('nav_menu_item', 'venue', 'story'); // don't forget nav_menu_item to allow menus to work!
$query->set('post_type',$post_type);
return $query;
}
}
Et puis, les requêtes personnalisées sur la page ont commencé à fonctionner.
Essaye ça
<?php
$args = array ( 'post_type' => array( 'nav_menu_item', 'venue', 'story' ) );
$query = new WP_Query( $args );
while ( $query->have_posts() ) : $query->the_post();
the_title();
the_content();
endwhile;
wp_reset_postdata();
?>