J'ai un type d'archive personnalisé archive archive-projects.php que j'utilise en tant que modèle de page, car je souhaite afficher certains champs personnalisés. J'essaie d'obtenir l'ID de publication de cette page mais soit null ou l'id de la première publication de l'archive en fonction de ce que j'essaie. J'ai essayé de mettre mon code au-dessus de la boucle sur ma page mais sans aucune chance.
Toutes mes excuses s’il s’agit d’un doublon, mais j’ai essayé de rechercher de nombreux tutoriels à ce sujet et je n’ai toujours pas de réponse à mon scénario spécifique d’utilisation d’un modèle de page avec une archive de type publication personnalisée.
J'ai essayé ce code et cela fonctionne, mais je ne comprends toujours pas pourquoi aucune des autres méthodes ne semble fonctionner. Je suis réticent à garder cela comme solution car si l'utilisateur change le slug de page, cela ne fonctionnera plus:
$my_page_id = get_id_by_slug('projects');
function get_id_by_slug($page_slug) {
$page = get_page_by_path($page_slug);
if ($page) {
return $page->ID;
} else {
return null;
}
}
J'ai essayé ce qui suit sans succès (au-dessus de ma boucle personnalisée dans mon modèle):
get_queried_object_id(); // returns nothing
$page_id = $wp_query->get_queried_object_id(); // returns 0
global $post; // I've tried including this and removing with same effect
$post = $wp_query->post;
$post_id = $post->ID; // returns the id of the first post in my archive
Avez-vous des idées sur ce que je fais mal ou sur la bonne façon d'obtenir l'identifiant réel de la page de mes projets?
UPDATEMon type de publication personnalisé avait has_archive défini sur true. J'ai essayé de créer un modèle personnalisé, mais en raison de la hiérarchie de WordPress, il cherchait une page d'archive. J'ai résolu mon problème en définissant has_archive sur false et en créant un modèle personnalisé appelé page-template-projects.php. J'ai ensuite pu configurer une page appelée Projets et utiliser mon modèle personnalisé, tout en pouvant obtenir correctement un ID pour la page.
J'ai l'impression que j'ai peut-être mal interprété votre question
Juste quelques notes ici
Si archive-projects.php
est un modèle de page, renommez-le. Vous ne devez pas utiliser archive comme préfixe pour un modèle de page, ni d'ailleurs pour tout autre nom de modèle réservé. Les modèles de page doivent être nommés page-{$name}.php
ou tout autre nom avec des préfixes utilisés par la hiérarchie des modèles. Ceci est déroutant pour Wordpress et gâche la hiérarchie des modèles
S'il s'agit d'un modèle de page, vous devez obtenir l'ID avec get_queried_object_id();
ou l'afficher avec echo get_queried_object_id();
.
S'il s'agit d'une vraie page d'archive, vous ne recevrez pas d'identifiant
Les pages d'archives, qu'il s'agisse de pages d'archives de type publication, d'archives de catégories, d'archives de dates, etc., de pages de recherche, de pages simples ou de page d'accueil, sont des pseudo-pages, autrement dit de fausses pages. Ils n'ont pas d'identifiant car ils n'existent pas car ce ne sont pas des pages créées qui sont sauvegardées dans la base de données
Ces pages "héritent" de l'identifiant de la publication ou de l'archive spécifique qu'elles affichent, bien qu'elles n'aient toujours pas d'identifiant, acceptent la page d'accueil, les archives de date, les pages de recherche et les archives de type d'article.
Donc, en bref, votre page de post-archive personnalisée n'aura pas d'identifiant.
Vous pouvez faire un var_dump($wp_query)
sur votre page d’archive, vous verrez que seules les pages réelles ont un ID
?><pre><?php var_dump($wp_query); ?></pre><?php
Mon type de publication personnalisée avait has_archive
défini sur true. J'ai essayé de créer un modèle personnalisé, mais en raison de la hiérarchie de WordPress, il cherchait une page d'archive. J'ai résolu mon problème en définissant has_archive
sur false et en créant un modèle personnalisé appelé page-template-projects.php. (le nom n'a pas d'importance) J'ai ensuite pu configurer une page appelée Projets et utiliser mon modèle personnalisé, tout en pouvant obtenir correctement un identifiant pour la page.
Si vous configurez un type de publication personnalisé, prenez note de has_archive
et assurez-vous de l'utiliser en conséquence. Si vous définissez cette valeur sur false, vous pouvez facilement créer votre propre modèle et votre requête personnalisée en utilisant WP_Query
dans votre modèle pour répertorier les publications appartenant à votre type de publication personnalisée.