Comment découvrir le slug de type de publication personnalisé lorsque je suis sur une page d'archive?
Par exemple, si /products/
le archive-products.php
modèle est déclenché , comment (de façon pragmatique) puis-je obtenir le slug de type de message?
Merci
custom-post-types
archives
custom-post-type-archives
Ben Everard
la source
la source
get_queried_object()
obtiendrait les mêmes informations en moins de mouvements.$posttype = get_query_var('post_type');
... J'ai ajouté une alternative complète.J'utilise cela en dehors de la boucle sur le modèle archive.php pour obtenir sur quelle archive de publication personnalisée je suis.
C'est un combo des méthodes recommandées par @toscho et @Rarst:
Mise à jour: @majick a souligné que cela ne fonctionne que si vous avez défini le slug de réécriture pour votre CPT. La réécriture du slug est facultative lors de l'enregistrement d'un CPT et par défaut à post_type s'il n'est pas défini.
la source
Notice: Undefined property: stdClass::$rewrite in ***\wp-content\themes\marks-remarks\archive.php on line 4
Les réponses deviennent confuses. Et peut - être Im aussi bien , mais le titre question est:
Si vous voulez dire la page de destination de l' archive de type de publication , et lorsque vous
is_post_type_archive()
reveneztrue
, vous voulez que le slug réponde à l'archive d'affichage actuelle :- FIN DE RÉPONSE À LA QUESTION -
Explication:
Vous ne pouvez pas compter sur la limace enregistrée . Wordpress ne l'est pas non plus. Par exemple, lorsque vous appelez
get_post_type_archive_link()
Wordpress, vous vérifiez les règles de réécriture actuelles pour votre installation .Où que vous soyez, à l'intérieur ou à l'extérieur de la boucle, de l'archive actuelle ou d'un seul article, inversez le
get_post_type_archive_link()
mécanisme. (Permaliens activés.)Considérations:
Comme mentionné ici, le (s) type (s) de message dans la requête en cours peut être un
array
. Vous pouvez aller plus loin avec vos intentions en filtrant le type de message que vous recherchez, par exemple:ou
Un autre point de vue:
Exemple de Woocommerce, est enregistré avec un objet de type de publication «produits» mais utilise en réalité un nom de règle réécrit (boutique):
la source
Il convient de noter que s'il
has_archive
est défini sur true lors de l'enregistrement du type de publication personnalisé, l'archive du type de publication/cptslug/
sera réécrite en interne?post_type=cptslug
. Donc, cela signifierait également que le résultatis_post_type_archive()
sera vrai.Malheureusement, lorsque le slug de réécriture enregistré est différent du type de publication, vous n'obtenez pas réellement de manière fiable
post_type
. par exemple. si votre type de publication étaitmyplugin_cars
et que votre slug de réécriture l'étaitcars
et que vous devez obtenirmyplugin_cars
alors même cela (pour éviter les erreurs si l'objet interrogé actuel n'est pas un type de publication personnalisé) échouera toujours:Mais parce que
is_post_type_archive
c'est vrai, c'est plus fiable:Mais attendez, il y a plus ... il s'avère qu'avec un peu de test ce n'est vraiment pas aussi simple non plus ... et si vous êtes sur une page d'archive de taxonomie avec plusieurs types de messages dans la taxonomie ..? Ou attribuer des balises de publication à un type de publication personnalisé autre que la publication? Ou êtes-vous sur une page d'archive d'auteur? Page d'archive de date? ... ou même avoir un complexe
tax_query
oumeta_query
pourWP_Query
?La seule réponse fiable (sans tester tous les cas d'archives possibles) est de boucler les messages réels dans la requête ... Voici la fonction complète que j'ai trouvée pour travailler à la fois sur les pages singulières et d'archivage, et vous permettant éventuellement de passer un objet de requête personnalisé (ou objet de publication / ID de publication pour les publications singulières):
Cela renverra de manière fiable (ai-je dit cela?) Un tableau de types de publication s'il y en a plusieurs, ou une chaîne avec le type de publication unique s'il n'y a qu'un seul type. Il vous suffit de:
Exemple d'utilisation (juste pour le plaisir):
Pour voir l'effet, changez le type de publication personnalisé dans le code en
post
et ajoutez unthumbtype-post
attribut de classe à vos images miniatures de publication ...la source
Vous pouvez utiliser ce code:
utilisez $ posttype_slug var tout ce dont vous avez besoin
la source
$queried_object->query_var['post_type'];
que cela fonctionne ...?post_type=post
je me vide. comparer avecget_query_var('post_type');
Vous pouvez utiliser ce code et ce code fonctionne pour moi,
la source
la source