web-dev-qa-db-fra.com

Impossible d'obtenir l'identifiant de publication sur la page qui est une archive de type de publication personnalisée

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.

5
Greg

MODIFIER

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

RÉPONSE ORIGINALE

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.

PREUVE DE CONCEPT

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 
5
Pieter Goosen

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.

0
Greg