web-dev-qa-db-fra.com

Obtenir la page par modèle?

Je suis dans une situation compliquée. Je vais essayer de l'expliquer aussi facilement que possible.

Imaginez les pages suivantes:

  • Page 1
  • Page 2
    • Sous-page 1
    • Sous-page 2
    • Sous-page 3

Chaque sous-page de la page 2 répertorie les publications d'un type de publication personnalisé avec une taxonomie spécifique. Appelons les objets de type publication, et la taxonomie uniquement les catégories, pour rester simple.

Pour répertorier les différents articles des différentes catégories, j'ai trois modèles de page différents pour les sous-pages: subpage-1-templ.php, subpage-2-templ.php et subpage-3-templ.php. Chacun de ces modèles répertorie les publications d'une catégorie spécifique pour le type de publication (Objets). C'est codé en dur.

Jusqu'ici tout va bien, cela fonctionne comme prévu. C'est un peu moche de devoir le coder en dur mais je ne connais pas d'autre moyen, alors ça devra marcher pour le moment. (Je préférerais laisser tomber WordPress mais c'est une autre histoire)

Toutes ces sous-pages répertorie les frères et soeurs dans un sous-menu. Donc, si vous êtes sur la sous-page 2, les sous-pages 1, 2 et 3 seront affichées (mais la sous-page 2 a une classe en cours). Fonctionne bien.

Passons maintenant au problème actuel. Lorsque vous cliquez sur l'un des messages répertoriés dans une sous-page, vous accédez à une page qui affiche plus d'informations pour le message, comme prévu. Le problème est que je veux montrer le sous-menu de la page 2 (donc, les sous-pages 1, 2 et 3). Je ne sais pas comment faire cela sans le coder en dur.

Peut-être, et je ne sais pas si cela fonctionnera, mais peut-être que je peux trouver une page par son modèle. Je peux créer un modèle pour la page 2 (pas pour ses enfants, la page parent réelle) appelé objects-template.php, puis sur un article, je peux saisir la page qui utilise le modèle, puis obtenir tous ses enfants, puis simplement les lister . Je ne sais tout simplement pas comment obtenir une page par son modèle, si cela est même possible (de préférence par le nom du fichier modèle, mais le nom du modèle fonctionne également).

Aucune suggestion?

Modifier

    // Query looks fine right?
    $query = new WP_Query(array(
        'meta_key' => '_wp_page_template',
        'meta_value' => 'objects-parent-page-template.php'
    ));
    // Dump the id (also tried just getting the object with get_queried_object(), still get null)
    echo '<pre>'; var_dump($query->get_queried_object_id()); die();
4
qwerty

Le nom de fichier du modèle de page est stocké en tant que méta de publication avec la clé '_wp_page_template'. Vous pouvez donc utiliser get_post_meta($post_id, '_wp_page_template', true); pour obtenir le nom de fichier du modèle de la page portant l'ID $post_id.

Vous pouvez également faire l’inverse (c’est-à-dire obtenir l’identifiant du nom de fichier du modèle de page) en utilisant Paramètres de champs personnalisés in WP_Query ou d’autres fonctions wordpress.

Il existe également une fonction conditionnelle is_page_template qui vérifie si le modèle de la page en cours est celui spécifié dans le paramètre

Cela résoudra probablement votre problème et aidera peut-être à vous débarrasser de tout ce qui est codé en dur.

5
Mridul Aggarwal