J'essaie de récupérer le slug de la page WordPress actuelle en dehors de la boucle. Le titre de la page revient avec wp_title ()
, mais comment puis-je obtenir la limace?
<li>
<a href="/slug-of-current-page/">
<?php wp_title('', true); ?>
</a>
</li>
<?php global $post; $post_slug=$post->post_name; echo $post_slug; ?>
echo
. Donc, ce serait idéal:<?php global $post; echo $post->post_name; ?>
$WP_Post
?Comme d’autres réponses, la limace est stockée dans la
post_name
propriété. Bien qu'il soit possible d' y accéder directement, je préfère la fonction (sous-utilisée)get_post_field()
pour accéder aux propriétés de publication qui ne possèdent pas d'API appropriée.Il faut que le message soit fourni explicitement et qu'il ne corresponde pas au message actuel, il serait donc complet pour le message actuel:
la source
get_post_field
sans second argument ( docs )EDIT 5 AVRIL 2016
Après avoir creusé pour plus de fiabilité, j'ai fini par faire cette réponse au message suivant qui mène à cette modification: ( Assurez-vous de vérifier )
La méthode la plus fiable à ce jour que je pourrais trouver est la suivante:
De cette façon, vous êtes sûr à 99,9999% d’obtenir les bonnes données à chaque fois.
RÉPONSE ORIGINALE
Une autre alternative plus sûre à ce problème consiste à utiliser
get_queried_object()
qui contient l'objet interrogé en cours pour obtenir le slug de page détenu par lapost_name
propriété. Ceci peut être utilisé n'importe où dans votre modèle.$post
peut être utilisé, mais peut ne pas être fiable, car toute requête personnalisée ou code personnalisé peut modifier la valeur de$post
, il est donc préférable de l'éviter en dehors de la boucle.Utiliser
get_queried_object()
pour obtenir l'objet de la page en cours est beaucoup plus fiable et moins susceptible d'être modifié, à moins que vous n'utilisiez le mal,query_posts
qui casse l'objet de requête principal, mais tout dépend de vous.Vous pouvez utiliser ce qui précède comme suit
la source
query_posts
n'est pas mauvais quand vous voulez modifier la requête principale , ce qui n'est pas le cas et qui est souvent mal utilisé :)Le moyen simple d'obtenir la limace est avec:
la source
http://domain/?p=123
, vous laissant avec?p=123
.Étant donné l'exemple de code, il semble que vous ayez vraiment besoin d'un lien. Dans ce cas, vous pouvez utiliser get_permalink () , qui peut être utilisé en dehors de la boucle. Cela devrait faire ce dont vous avez besoin de manière plus fiable que d'utiliser le post slug.
la source
C'est peut-être une vieille question, mais j'ai créé les fonctions get_the_slug () et the_slug () en fonction de vos réponses.
la source
C'est la fonction à utiliser pour récupérer le slug en dehors de la boucle.
Réponse trouvée ici: Comment récupérer le slug de la page actuelle dans WordPress?
la source
Juste plus loin sur la réponse de @Matthew Boynes, si vous êtes intéressé à obtenir le slug parent (le cas échéant), alors j'ai trouvé cette fonction utile:
Par exemple, ajouter la ou les limaces à la classe de corps:
la source
Si vous voulez une réponse plus subtile, vous pouvez utiliser la requête SQL suivante pour extraire à tout moment tous les articles qui sont des articles, des pages ou des taxonomies personnalisées, même si aucun crochet n'a été utilisé à ce jour.
SQL brut:
Cela fonctionne même sur la première ligne de votre fichier de fonctions, avant même le
mu_plugins_loaded
ou lesinit
crochets.@Remarque
Cela suppose que vous avez un préfixe de base de données standard
wp_posts
. Si vous devez prendre en compte les préfixes de variable, vous pouvez obtenir assez facilement le tableau de publication correct via PHP en procédant comme suit:Ensuite , exécutez soit
$wpdb
,mysqli
ou unePDO
instance. Etant donné qu'il n'y a aucune entrée d'utilisateur dans cette requête, il est prudent de l'exécuter sans une instruction préparée tant que vous n'y injectez aucune variable.Je suggérerais de stocker ceci en tant que valeur statique privée d'une classe, de sorte qu'il soit possible d'y accéder sans avoir à relancer la requête plusieurs fois par page pour obtenir les meilleures performances, comme ceci:
Usage
Vous avez l'essentiel. Si vous avez besoin de plus amples détails, vous pouvez les récupérer comme d'habitude avec
new \WP_Post( get_the_ID() );
Cela vous permettra de vérifier les publications à tout moment, même si la boucle wordpress n’a pas atteint un point où elle juge votre demande agréable. Ceci est une version légèrement plus optimisée de la même requête exécutée par le noyau Wordpress lui-même. Celui-ci filtre toutes les informations indésirables que vous ne voudriez pas retrouver, et vous donne simplement une liste bien organisée avec l'identifiant de l'auteur, le type de publication, le mot de passe et la visibilité appropriés. Si vous avez besoin de plus de détails, vous pouvez les récupérer comme d'habitude avec
new \WP_Post($id);
, ou utiliser l'une des autres fonctions Wordpress natives avec l'une des lignes de la table pertinentes, même en dehors de la boucle.J'utilise une configuration similaire dans quelques-uns de mes propres thèmes et plugins personnalisés, et cela fonctionne très bien. Il est également sécurisé et ne laisse pas de données internes flottantes dans la portée globale où elles peuvent être remplacées, comme le font la plupart des éléments de Wordpress.
la source
Honnêtement, je ne comprends pas pourquoi aucune des réponses ne le fait tout simplement:
Cela fonctionne pour tous les articles, pages, itinéraires personnalisés.
la source
Appel de page dynamique dans WordPress.
la source