Quel code PHP peut être utilisé pour récupérer le nom de la page actuelle dans un thème WordPress?
Toutes les solutions que j'ai vu jusqu'à présent ( the_title()
, get_page()->post_name
, get_post()
, etc.) ne fonctionnent pas pour une page qui contient des entrées de poste. Ils renverront tous le nom de la dernière entrée de blog.
En d'autres termes, supposons que vous ayez une page créée dans WordPress avec le nom «Mes nouvelles». Cette page est définie comme la "page de publication". Ajoutez quelques articles à la page. Maintenant, quelle API peut être utilisée pour récupérer la chaîne "my-news" au lieu du nom du dernier message?
J'ai trouvé la variable suivante qui semble fonctionner.
$wp_query->queried_object->post_name
C'est en fait la version conviviale du nom de la page (slug), ce que je recherchais également. Cela a été testé avec le modèle par défaut ( Twenty Ten ). Je ne sais vraiment pas pourquoi les deux variables ci-dessous ne fonctionnent pas sur mon site. Merci à keatch pour le print_r()
tuyau .
Maintenant, pourquoi cette information est-elle si profondément cachée?
la source
Réponses:
La variable globale WordPress
$pagename
devrait être disponible pour vous. Je viens d'essayer avec la même configuration que vous avez spécifiée.$pagename
est défini dans le fichier wp-includes / theme.php, à l'intérieur de la fonctionget_page_template()
, qui est bien sûr appelée avant que vos fichiers de thème de page ne soient analysés, donc il est disponible à tout moment dans vos modèles de pages.Bien que cela ne semble pas être documenté, la
$pagename
variable n'est définie que si vous utilisez des permaliens. Je suppose que c'est parce que si vous ne les utilisez pas, WordPress n'a pas besoin du slug de page, donc il ne le configure pas.$pagename
n'est pas défini si vous utilisez la page comme une page d'accueil statique.C'est le code dans /wp-includes/theme.php, qui utilise la solution que vous avez indiquée quand
$pagename
ne peut pas être définie:$ nom de page = get_query_var ('nom de page'); if (! $ nom de page && $ id> 0) {// Si une page statique est définie comme page d'accueil, $ nom de page ne sera pas défini. Récupérez-le depuis l'objet interrogé $ post = $ wp_query-> get_queried_object (); $ pagename = $ post-> post_name; }
la source
$pagename = $wp_query->queried_object->post_name;
, juste ne pas oublier de mettreglobal $wp_query;
avant!Mon approche pour obtenir le nom du slug de la page:
la source
Ok, vous devez saisir le titre de la page avant la boucle.
Vérifiez la référence: http://codex.wordpress.org/Function_Reference/WP_Query#Properties .
Fait une
avant la boucle pour voir toutes les valeurs de l'
$wp_query
objet.la source
Cela a fonctionné pour moi.
Si je comprends bien, vous souhaitez obtenir le nom de la page sur une page contenant des entrées de publication.
la source
Vous pouvez obtenir la page actuelle, la publication ou le type de publication personnalisé avec la variable globale
$post
:Remarque: dans une fonction ou une classe, vous devrez spécifier
global $post;
avant d'essayer d'utiliser$post
.Si vous avez des boucles sur votre page, assurez-vous de terminer chaque boucle par
wp_reset_postdata();
pour$post
revenir à l'élément par défaut affiché (la page).Notez que la variable 'post_title' est également disponible pour toute boucle / requête personnalisée ... y compris les éléments de menu et les pièces jointes multimédias ... tout dans WordPress est un `` post ''.
la source
Si vous cherchez à accéder à la page actuelle à partir de votre fichier functions.php (donc, avant que la boucle, avant ne
$post
soit remplie, avant d'$wp_query
être initialisée, etc ...) vous n'avez vraiment pas d'autre choix que d'accéder aux variables du serveur elles-mêmes et extraire la page demandée de la chaîne de requête.Notez que c'est une solution «stupide». Il ne sait pas, par exemple, que la page avec le slug 'coming-soon' l'est également
p=6
. Et cela suppose que vos paramètres de permalien sont définis surpagename
(ce qu'ils devraient être de toute façon!).Pourtant, cela peut être une petite astuce utile si vous avez un scénario contrôlé. J'utilise ceci dans une situation où je souhaite rediriger les visiteurs non connectés vers une page "à venir"; mais je dois m'assurer que je ne les jette pas dans la redoutable "boucle de redirection", donc je dois exclure la page "à venir" de cette règle:
la source
Je pense que le thème de démarrage Roots a une fonction fantastique pour obtenir le titre de la page actuelle. Il est très piratable, couvre toutes les bases et peut être facilement utilisé avec le
wp_title
crochet.la source
Essaye ça:
la source
J'ai trouvé une solution plus simple.
Récupère la valeur renvoyée du nom de la page par wp_title (). S'il est vide, affiche le nom de la page d'accueil, sinon renvoie la valeur wp_title ().
N'oubliez pas de supprimer la séparation avec le premier argument, puis de définir display sur false pour l'utiliser comme entrée de la variable. Ensuite, ajoutez simplement le code entre vos balises d'en-tête, etc.
Cela a fonctionné un régal pour moi et en veillant à ce que le premier soit déclaré dans la section où vous souhaitez extraire le
$title
, cela peut être réglé pour renvoyer différentes variables.la source
Il suffit d'utiliser la variable globale "post":
Cela fera écho au titre actuel de la page / de l'article.
la source
Utilisation:
la source
Cela semble être le plus simple à utiliser:
la source
Afficher le titre avant le début de la boucle:
la source
Une option, si vous recherchez la page interrogée, plutôt que l'ID de page ou le slug, consiste à intercepter la requête:
Dans votre fonction, vous avez accès à l'objet $ wp et vous pouvez obtenir le nom de page ou le nom de l'article avec:
Si, par contre, vous avez vraiment besoin des données de publication, le premier endroit pour les obtenir (et sans doute dans ce contexte, le meilleur) est:
Enfin, je réalise que ce n'était probablement pas la question du PO, mais si vous recherchez le nom de la page Admin , utilisez le global
$pagenow
.la source
Dans la boucle WordPress :
Cela vous montrera le titre de la page actuelle.
Pour référence: get_the_title ()
la source
Voici ma version:
get_query_var ('pagename') me donnait juste le slug de page. Ainsi, ce qui précède remplace tous les tirets et rend la première lettre de chaque mot en majuscule - afin qu'il puisse effectivement être utilisé comme titre.
la source
C'est ce que j'ai fini par utiliser, à partir de 2018:
la source
J'ai maintenant trouvé cette fonction sur WordPress Codec ,
être interrogé
qui est un wrapper pour
$wp_query->get_queried_object
.Ce post m'a mis dans la bonne direction, mais il semble qu'il ait besoin de cette mise à jour.
la source
Cela fonctionne également si vous êtes dans le functions.php. Ce n'est pas la meilleure approche car vous devez utiliser le tableau global, mais cela fonctionne.
Tout d'abord, nous devons ajouter un filtre. Il doit exister un meilleur filtre à utiliser que le template_include, mais je ne les connais pas tous. Veuillez m'indiquer la bonne.
Évitez d'utiliser la variable directement
Vous pouvez maintenant utiliser la fonction
get_current_page()
dans n'importe quelle autre partie du functions.php.la source