web-dev-qa-db-fra.com

Obtenir les identifiants de page en fonction du modèle utilisé?

Dans certaines situations, je dois fournir une liste déroulante de pages dans un widget, en fonction de l'utilisation ou non d'un modèle spécifique. En d'autres termes, pour toutes les pages utilisant le modèle 'Foo', obtenez l'ID de l'article.

J'ai codé le reste du widget, mais j'utilise un champ de saisie pour saisir un identifiant de page (ce qui peut être gênant pour les utilisateurs non techniques, car il doit trouver l'identifiant de page à utiliser). Sélectionnez la case avec le titre de la page en utilisant le modèle spécifique.

J'ai essayé d'obtenir l'objet WP_Query avec ceci:

$the_query = new WP_Query(array(
    'meta_key' => '_wp_page_template',
    'meta_value' => 'templates/_partner.php'
));

La méta valeur est correcte (correspond à 2 entrées dans la base de données), mais je n’obtiens aucun résultat sur la page du widget. La zone de sélection est vide.

Ne pouvez-vous pas appeler WP_Query à partir d'un widget ou dois-je chercher ailleurs cette solution?

UPDATEJ'ai vérifié la requête $ the_query-> du SQL qui l'exécute et qui ne renvoie aucune ligne. Il s'avère que je manquais le 'post_type' => 'page' dans la requête.

5
Calle

WP_Query ne passe que par les articles par défaut.

Essayez d'ajouter page comme type de message:

$the_query = new WP_Query(array(
    'post_type'  => 'page',  /* overrides default 'post' */
    'meta_key'   => '_wp_page_template',
    'meta_value' => 'templates/_partner.php'
));

Voir: WP_Query - Type Parameters

6
Michal Mau

Vous pouvez utiliser wp_dropdown_pages() pour créer directement une liste déroulante des pages que vous souhaitez afficher:

$args = array(
    'name' => '_partner_page', // "name" attr of the <select> element
    'id' => 'partner-page', // id attr of the <select> element
    'hierarchical' => 1, // set to 0 for flat display
    'echo' => 1, // set to 0 to return
    'selected' => $post->ID, // ID of the option with "selected" attr, set to 0 to disable
    'meta_key' => '_wp_page_template',
    'meta_value' => 'templates/_partner.php'
);
wp_dropdown_pages($args);

Vous pouvez passer beaucoup d’agruments à wp_dropdown_pages(). Outre ceux figurant sur la page de codex de cette fonction, vous pouvez également transmettre tout argument répertorié dans la fonction get_pages() , car wp_dropdown_pages() utilise get_pages() pour extraire la liste des pages qui seront affichées sous forme de liste déroulante. liste.

2
Ahmad M
$query= new WP_Query(array(
    'post_type'  => 'page',  /* overrides default 'post' */
    'meta_key'   => '_wp_page_template',
    'meta_value' => 'page-templates/{template name}.php'
));

Cela a fonctionné pour moi parce que mon thème personnalisé utilisait le dossier page-templates .

2
Lasantha