La situation est la suivante: j'ai créé un type de publication personnalisé qui fonctionne parfaitement. Je souhaite maintenant créer un modèle de page d'archive spécifique pour les taxonomies de ce type de publication.
J'ai dupliqué la page archive.php
de mon thème (schéma de MTS) mais cela ne fonctionne pas dans ce cas.
Voici le code:
<?php
$term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ), get_query_var( 'count' ) );
echo $term->name;
echo ' has nr elements: ';
echo $term->count;
?>
<div id="page">
<div class="<?php mts_article_class(); ?>">
<div id="content_box">
<h1 class="postsby">
<span><?php echo the_archive_title(); ?></span>
</h1>
<?php $j = 0; if (have_posts()) : while (have_posts()) : the_post(); ?>
<article class="latestPost excerpt <?php echo (++$j % 3 == 0) ? 'last' : ''; ?>">
<?php mts_archive_post(); ?>
</article><!--.post excerpt-->
<?php endwhile; else: echo 'nothing'; endif; ?>
<?php if ( $j !== 0 ) { // No pagination if there is no posts ?>
<?php mts_pagination(); ?>
<?php } ?>
</div>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
L'aspect étrange est que le code n'imprime "rien" car la fonction have_posts()
renvoie false mais le $term->count
est 3
.
Pouvez-vous m'aider s'il vous plaît? Merci beaucoup d'avance!
J'ai eu le même problème.
Selon documentation :
The hierarchy for a custom taxonomy is listed below:
taxonomy-{taxonomy}-{term}.php
taxonomy-{taxonomy}.php
taxonomy.php
archive.php
index.php
Ainsi, peu importe le fichier de modèle que vous utilisez, ils génèrent tous le même problème.
Quand j'ai mis au début du code de fichier modèle var_dump($wp_query);
, j'ai trouvé ceci:
public 'request' => string 'SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts LEFT JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) WHERE 1=1 AND (
wp_term_relationships.term_taxonomy_id IN (20)
) AND wp_posts.post_type IN ('post', 'page', 'attachment') AND (wp_posts.post_status = 'publish' OR wp_posts.post_author = 1 AND wp_posts.post_status = 'private') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 10' (length=433)
public 'posts' =>
La partie importante de cette requête est wp_posts.post_type IN ('post', 'page', 'attachment')
.
Un problème se produit car il n'y a pas votre post_type
personnalisé dans ce tableau ('post', 'page', 'attachment')
.
Je ne sais pas pourquoi c'est arrivé, mais il est possible de le réparer en utilisant pre_get_posts
hook:
add_filter('pre_get_posts', 'add_custom_post_type_to_query');
function add_custom_post_type_to_query($query) {
// We do not want unintended consequences.
if ( is_admin() || ! $query->is_main_query() ) {
return;
}
// Check if custom taxonomy is being viewed
if( is_tax() && empty( $query->query_vars['suppress_filters'] ) )
{
$query->set( 'post_type', array(
'post',
'page',
'my_custom_post_type'
) );
}
}
Ce qui ne va pas ici, ce sont vos hypothèses selon lesquelles les valeurs devraient être les mêmes. Je ne sais pas exactement ce que le nombre de termes représente exactement, et cela n'apparaît pas dans la documentation, mais il s'agit probablement d'un nombre brut de messages associés à ce terme. OTOH wp_query
(qui est utilisé pour la boucle principale) prend en compte les autorisations utilisateur au-dessus de ce nombre brut, exemple le plus simple. Par défaut, le résultat n'inclut pas les publications non publiées. Des problèmes plus complexes peuvent se produire si vous avez des plugins qui manipuler la requête.