Cela devrait être simple, mais ça m'échappe.
J'ai un type de message personnalisé et une taxonomie personnalisée. La taxonomie est nommée "asset_type" et le slug est "type"
J'utilise wp_list_categories
pour fournir un menu dans la barre latérale où les utilisateurs peuvent cliquer pour afficher les publications dans la taxonomie cliquée.
Par exemple:
<div class="category-sidebar"><?php
$args = array('post_type' => 'design_asset', 'show_count' => 1, 'taxonomy' => 'asset_type');
wp_list_categories($args);
?>
</div>
Cela affiche correctement mes conditions fiscales, par exemple, "élément", avec le lien de http://site.dev/type/element/
Il va à la page, mais je ne peux pas comprendre comment modifier ma boucle, il ne montre que les posts qui correspondent au terme actuel, dans cet exemple "élément", ni le titre de la page sous la forme "Élément".
Ma boucle pour afficher TOUS les articles est:
$args = array( 'post_type' => 'design_asset', 'posts_per_page' => 100, 'orderby' => 'title', 'order' => 'ASC' );
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
Steve, vous avez posé quelques questions auxquelles j'ai jeté un coup d'œil et je suis arrivé à la conclusion que votre boucle vous causait tous des maux de tête.
Ma boucle pour afficher TOUS les articles est:
$args = array( 'post_type' => 'design_asset', 'posts_per_page' => 100, 'orderby' => 'title', 'order' => 'ASC' ); $loop = new WP_Query( $args ); while ( $loop->have_posts() ) : $loop->the_post();
Les boucles personnalisées sur n'importe quelle page d'archive créent des problèmes. La requête principale est assez spécifique sur ces pages, et ces requêtes sont un shlep à reproduire dans une requête personnalisée. Pour avoir une idée du fonctionnement de la requête principale et de la manière dont la requête principale décide quoi afficher, allez vérifier ma réponse à cette question
Je vous déconseille d'utiliser toute requête personnalisée pour votre boucle principale sur une page d'archive, ou même sur la page d'accueil.
Mon conseil serait de changer toutes vos boucles dans tous vos modèles pour revenir à la boucle par défaut
if ( have_posts() ) :
while ( have_posts() ) : the_post();
<----LOOP ELEMENTS---->
endwhile;
endif;
Une fois que vous avez rétabli la boucle par défaut, vous verrez que tout fonctionnera normalement, sauf que votre type de publication personnalisé ne sera pas inclus dans votre boucle principale.
Pour remédier à cela, vous utiliserez pre_get_posts
pour ajouter votre type d'article personnalisé et toute autre modification à la requête principale.
function include_cpt( $query ) {
if ( !is_admin() && $query->is_main_query() ) {
$query->set( 'post_type', 'design_asset' );
$query->set( 'posts_per_page', '100' );
$query->set( 'orderby', 'title' );
$query->set( 'order', 'ASC' );
}
}
add_action( 'pre_get_posts', 'include_cpt' );
Tout devrait fonctionner normalement et comme prévu
Il va à la page, mais je ne peux pas comprendre comment modifier ma boucle, il ne montre que les posts qui correspondent au terme actuel, dans cet exemple "élément", ni le titre de la page sous la forme "Élément".
Les arguments suivants pour votre boucle devraient faire l'affaire:
$args = array(
'post_type' => 'design_asset',
'posts_per_page' => 100,
'orderby' => 'title',
'order' => 'ASC',
'tax_query' => array(
array(
'taxonomy' => 'asset_type',
'field' => 'slug',
'terms' => end( ( explode( '/', rtrim( $_SERVER['REQUEST_URI'], '/' ) ) ) )
)
)
);
Références:
Vous avez déjà été touché par un gremlin commun: wp_list_categories ne prend pas post_type en argument. wp_list_categories génère toujours des liens vers des catégories pour le post_type par défaut 'post.' Si vous souhaitez utiliser des catégories séparées par des types de publication personnalisés, vous devez spécifier le lien permanent approprié. Voici une approche pour ajouter une structure de lien permanent pour une archive de type publication personnalisée .
Les réponses ci-dessus sont utiles si vous souhaitez que vos archives de catégorie incluent tous les types de publication.