Obtenir un slug de type d'article personnalisé pour une page d'archive
6 réponses
- votes
-
- 2012-10-07
Pour obtenir letype demessage actuel,utilisez
get_post_type()
.Demandezensuite àget_post_type_object()
toutes les données dont vous avezbesoin,parexemple le slug:$post_type = get_post_type(); if ( $post_type ) { $post_type_data = get_post_type_object( $post_type ); $post_type_slug = $post_type_data->rewrite['slug']; echo $post_type_slug; }
To get the current post type use
get_post_type()
. Then askget_post_type_object()
for all the data you need, for example the slug:$post_type = get_post_type(); if ( $post_type ) { $post_type_data = get_post_type_object( $post_type ); $post_type_slug = $post_type_data->rewrite['slug']; echo $post_type_slug; }
-
Jepense que (n'avaitpastesté) [`get_queried_object ()`] (http://queryposts.com/function/get_queried_object/) obtiendrait lesmêmesinformationsen moins demouvements.I think (hadn't tested) [`get_queried_object()`](http://queryposts.com/function/get_queried_object/) would get to same info in less moves.
- 1
- 2012-10-09
- Rarst
-
@Rarst Peut-être,maisje pense que le code quej'ai suggéréestplusfacile à comprendre.@Rarst Maybe, but I think the code I suggested is easier to understand.
- 0
- 2012-10-09
- fuxia
-
Les solutions de Toscho sonterronées,carget_post_type renvoie letype depublication de lapage courante,et,lorsque vous êtes dans lapage d'archive,cettefonction renvoietoujours "page".Je cherche à résoudre lamême chose: quandje suis dans lapage d'archive de «livres» (4exemple),je veux ceci: «livres».Quandje l'aurai,je leposterai.Toscho's solutions is wrong, because get_post_type returns the post type of current page, and, when you are into archive page, this function alwasy return "page". I'm sarching to solve the same: When I am into archive page of 'books' (4 example), I want this: 'books'. When I get it I'll post it.
- 1
- 2013-06-25
- eMarine
-
malheureusement cen'estpas aussi simple,même si vous seriezmieux avecjuste `$posttype=get_query_var ('post_type');` ... J'ai ajouté une alternative complète.unfortunately it's not that simple, though you'd be better off with just `$posttype = get_query_var('post_type');` ... I've added a comprehensive alternative.
- 1
- 2016-06-06
- majick
-
Jene pensepas que cette réponse couvretoute l'histoire.Vous devriez vérifier les règles de réécriture d'installation car denombreuxfiltres (comme lapage de laboutique woocommerce) apportent desmodifications.** Utilisezplutôt lemécanismepropre à Worpdress **,voirma réponse quelquepart ci-dessous.I don think This is answer cover the whole story. You should check the install rewrite rules as many filters (like woocommerce shop page) is making changes. **Use the Worpdress own mecanism instead**, see my answer somewhere below.
- 0
- 2017-10-21
- Jonas Lundman
-
- 2014-10-29
J'utilise cecien dehors de laboucle sur lemodèle archive.phppour obtenir l'archive depublicationpersonnalisée sur laquelleje metrouve.
C'est une combinaison desméthodes recommandées à lafoispar @toschoet @Rarst:
$post_type = get_queried_object(); echo $post_type->rewrite['slug'];
Mise àjour: @majick a souligné que celane fonctionne que si vous avez défini le slug de réécriturepour votre CPT.Le slug de réécritureestfacultatif lors de l'enregistrement d'un CPTet estpar défautpost_type s'iln'estpas défini.
I'm using this outside of the loop on the archive.php template to get which custom post archive I'm on.
It's a combo of the methods that both @toscho and @Rarst recommended:
$post_type = get_queried_object(); echo $post_type->rewrite['slug'];
Update: @majick pointed out that this only works if you've set the rewrite slug for your CPT. Rewrite slug is optional when registering a CPT and defaults to post_type if not set.
-
quandj'aiessayé cela,j'aieu `Remarque:propriéténon définie: stdClass :: $ rewritein *** \ wp-content \themes \marks-remarques \ archive.php sur la ligne 4`when I tried this I got `Notice: Undefined property: stdClass::$rewrite in ***\wp-content\themes\marks-remarks\archive.php on line 4`
- 0
- 2015-10-20
- patrickzdb
-
celane fonctionnera que si le slug de réécritureest définipour le CPTenregistré,carilestfacultatifet par défaut lepost_typethis will only work if the rewrite slug is set for the registered CPT, as it is optional and defaults to the post_type
- 0
- 2016-06-03
- majick
-
Merci d'avoir attrapé ce @majick!J'aimis àjour lemessagepour refléter vosinformations.Thanks for catching that @majick! I've updated the post to reflect your info.
- 0
- 2016-06-03
- Jerry
-
il s'avère que c'était lapointe de l'iceberg ... vérifiezmanouvelle réponsepour lapartie sous-marine :-)turns out that was the tip of the iceberg... check my new answer for the underwater part :-)
- 0
- 2016-06-06
- majick
-
- 2017-10-21
Les réponsesprêtent à confusion. Etpeut-être queje suis aussi,mais la question du titre est:
Obtenir letype demessagepersonnalisé slug pour une page d'archive
Si vous voulez dire lapage de destination archive detype depublication ,et lorsque
is_post_type_archive()
renvoietrue
,vous voulez que le slug qui réponde à < archive de consultationforte> actuelle :/* returns /products/ */ $responding_name = str_replace(get_home_url(), '', get_post_type_archive_link(get_query_var('post_type'))); /* continue to get 'products' without slug slashes */ $responding_name = str_replace('/', '', $responding_name);
- FIN DE RÉPONSE À LA QUESTION -
<↑Explication :
Vousne pouvezpas vousfier au slugenregistré . Wordpressne l'estpasnonplus. Parexemple,lorsque vous appelez
get_post_type_archive_link()
,Wordpress vérifie les règles de réécriture actuelles pour votre installation .Où que vous soyez,à l'intérieur ou à l'extérieur de laboucle,de l'archive actuelle ou d'un seulpost,inversez lemécanisme
get_post_type_archive_link()
. (Permaliens activés.)<↓Considérations :
Commementionnéici,le (s)type (s) depublication dans la requête actuelle peut être un
array
. Vouspouvez allerplus loin avec vosintentions en filtrant letype depublication que vous recherchez,parexemple:$post_type = get_query_var('post_type'); if(is_array($post_type)) $post_type = reset($post_type);
ou
if(isset($post_types[0])) $post_type = $post_types[0];
Un autrepoint de vue:
L'exemple de Woocommerceestenregistré avec l'objet detype depublication 'produits'mais utiliseen réalité lenom de règle réécrit (boutique):
/* returns shop */ $responding_name = str_replace('/', '', str_replace(get_home_url(), '', get_post_type_archive_link('product')));
Mark,j'utilise
$responding_name
,car les objectifspeuvent varier. Une archive depublicationn'existepas,c'estjuste une URL.The answers get confusing. And maybe Im as well but the headline question is:
Get custom post type slug for an archive page
If you mean post type archive landing-page, and when
is_post_type_archive()
returnstrue
, you want the slug that responing to current viewing archive:/* returns /products/ */ $responding_name = str_replace(get_home_url(), '', get_post_type_archive_link(get_query_var('post_type'))); /* continue to get 'products' without slug slashes */ $responding_name = str_replace('/', '', $responding_name);
-- END OF ANSWERING THE QUESTION --
Explanation:
You cant rely on the registered slug. Wordpress is not either. For example, when calling
get_post_type_archive_link()
Wordpress is checking the current rewrite rules for your install .Wherever you are, inside or outside loop, current archive or single post, reverse the
get_post_type_archive_link()
mechanism. (Permalinks enabled.)Considerations:
As mentioned here, the post type(s) in current query can be an
array
. You can go futher with your intensions with filter out the post type you look for, example:$post_type = get_query_var('post_type'); if(is_array($post_type)) $post_type = reset($post_type);
or
if(isset($post_types[0])) $post_type = $post_types[0];
Another point of view:
Woocommerce example, is registered with 'products' post type object but in reality uses rewritten rule name (shop):
/* returns shop */ $responding_name = str_replace('/', '', str_replace(get_home_url(), '', get_post_type_archive_link('product')));
Mark, Im using
$responding_name
, because the objectives might vary. A post archive does not exists, its just a url.-
Cela a rendutrès clairmerci.Cherchait cette solution.Si la questionne recherchaitpas "seulement lenom dutype demessage",cela devrait être une réponse écrite.This made it very clear thank you. Was looking for this solution. If the question was not looking for "only just the post type name", this should be a woted up answer.
- 0
- 2017-10-21
- Jonas Lundman
-
- 2016-08-10
Vouspouvez utiliser ce codeet ce codefonctionnepourmoi,
$t_slug=get_query_var ('terme');
You can use this code and this code is working for me,
$t_slug = get_query_var('term');
-
- 2016-06-03
Vouspouvez utiliser ce code:
$queried_object = get_queried_object(); $posttype_slug = $queried_object->query_var; echo $posttype_slug;
utilisez $posttype_slug vartout ce dont vous avezbesoin
You can use this code:
$queried_object = get_queried_object(); $posttype_slug = $queried_object->query_var; echo $posttype_slug;
use $posttype_slug var whatever you need
-
il abesoin de `$ queried_object-> query_var ['post_type'];`pour que celafonctionne ...it needs to `$queried_object->query_var['post_type'];` for this to work...
- 0
- 2016-06-06
- majick
-
Non. $ queried_object-> query var contient uniquement une chaîne detypepost.cen'estpas un objet ou untableau.regardez cetteimage: http://prntscr.com/bd58e1No. $queried_object->query_var containe only string of post type. it's not object or array. look at this image: http://prntscr.com/bd58e1
- 0
- 2016-06-06
- Guy Ytzhak
-
okmais seulement si l'objetinterrogéest * certainement * un objet detype depublicationpersonnalisé,vous obtiendrez un objet correspondant différentet donc une valeur videpour lespages d'archive catégorie/taxe/tag/auteurparexemple.mêmepour `?post_type=post`je deviens vide.comparer avec `get_query_var ('post_type');`ok but only if the queried object is *definitely* a custom post type object, you will get a different corresponding object and thus empty value for category/tax/tag/author archive pages for example. even for `?post_type=post` I get empty. compare with `get_query_var('post_type');`
- 0
- 2016-06-06
- majick
-
Commentpuis-je découvrir le slug detype depublicationpersonnalisé lorsqueje suis sur unepage d'archive?
Parexemple,si
/products/
déclenche lemodèlearchive-products.php
,comment (demanièrepragmatique)puis-je obtenir le slug detype depublication?Merci