Vue d'ensemble
Je crée un thème qui a 2 types de publication personnalisés (sous forme de plugins personnalisés):
J'ai également créé des modèles single-articles.php
et archive-articles.php
à l'intérieur du plugin. Idem pour les examens CPT.
Les types de publication personnalisés utilisent les par défautTaxonomies WordPress (catégories et balises)
Mes paramètres de lecture sont réglés sur "Une page statique"
Première page: Accueil (un fichier front-page.php
personnalisé que j'ai créé)
Posts Page: La page "Site News" (que je veux montrerLES DEUXpostsET/ CPT)
Le problème
Après avoir créé un message régulieret/ basé sur les articles CPT, je suis allé à la page Principaux messages (Nouvelles du site) où j’ai fait pasvoir le type de message personnalisé (uniquement poste utilisant le type standard post
).
Après quelques recherches (je suis un noob), j'ai compris que si je voulais afficher les CPT sur la page principale des articles, je devrais écrire un filtre en utilisant pre_get_posts
.
Donc, pour récapituler: je souhaite montrer
Voici ce que j'ai fait
// Add custom post types to the default loop (ref: http://bit.ly/1bqeBJC)
function odigbs_add_custom_types( $query ) {
if ( !is_admin() && !is_preview() ) {
if ( (is_home() || is_category() || is_tag() || is_archive() || is_feed() ) && $query->is_main_query() ) {
$query->set( 'post_type', array( 'post', 'articles', 'reviews') );
return $query;
}
}
}
add_filter( 'pre_get_posts', 'odigbs_add_custom_types' );
Je suis sûr que c’est pas la bonne façonde fabriquer ce filtre, mais je ne trouve aucun article qui explique ce concept de manière approfondie… donc je suiswingin il.
Les résultats
http://site.dev/the-site-news/
la page principale des posts de Reading Settings), je suis maintenant _ (DO/ voir tous mes types de posts personnalisés etil utilise le fichier single-{post_type}.php
à l'intérieur du plugin.http://site.dev/category/{some term}/
et/ il utilise le fichier archive-{post_type}.php
à l'intérieur du plug-in.mais ...
http://site.dev/{custom_post_type}
c’est-à-dire que je n’utilise pas la catégorie) pour voir les archives de ce CPT, le site génère toutes sortes d’erreurs.http://starter.dev/{custom_post_type}/
, mais je suis de retour à l'endroit où j'ai commencé avec uniquement les publications par défaut affichées sur la page des publications principales. Types de poste.Questions
J'espère avoir clairement articulé le drame ...
Merci d'avance
Si nous regardons dans source , nous verrons dans quelles conditions is_archive
est vrai:
if ( $this->is_post_type_archive
|| $this->is_date
|| $this->is_author
|| $this->is_category
|| $this->is_tag
|| $this->is_tax )
$this->is_archive = true;
Le problème est que is_archive
déclenche votre filtre sur votre archive de type publication. Si vous voulez les exclure, assurez-vous que c'estnotis_post_type_archive
, ou ciblez les autres archives en vérifiant s'il s'agit d'un auteur ou d'une archive de date, ainsi que du tag et de la catégorie, et supprimez le fichier. vérifier pour is_archive
.
Si je comprends bien, vous voulez que vos CPT s'affichent sur des pages d'archives régulières (cateogires, requête principale, etc.), mais lorsque vous recherchez uniquement vos CPT, vous récupérez vos CPT avec tous les messages normaux, etc.
Voici ce que j'ai fait et pour l'instant, comme je l'ai vu, cela fonctionne bien, mais vous ne savez jamais où vous pouvez obtenir une erreur, alors essayez-le et voyez si cela fonctionne bien pour vous.
changez YOURCPT pour votre cpt :)
add_action( 'pre_get_posts', 'wpstck_get_YOURCPT_into_posts' );
function wpstck_get_YOURCPT_into_posts($query){
if ( !is_post_type_archive() && $query->is_main_query() ) {
$query->set( 'post_type', array( 'post', 'YOURCPT' ) );
return $query;
}
}