web-dev-qa-db-fra.com

Obtenir l'identifiant de la page par modèle

Je veux savoir s'il est possible d'obtenir l'ID d'une page avec un modèle spécifique. Est-ce possible d'obtenir l'ID d'une page ayant assigné "page-special.php"?

16
user3800799

Lorsqu'une page est créée, le modèle attribué à cette page est enregistré en tant que méta de publication personnalisé, de la même manière que les champs personnalisés. Le meta_key est _wp_page_template et le meta_value sera le modèle de page.

Vous pouvez simplement utiliser get_pages pour récupérer toutes les pages qui ont un meta_value du modèle spécifié.

$pages = get_pages(array(
    'meta_key' => '_wp_page_template',
    'meta_value' => 'page-special.php'
));
foreach($pages as $page){
    echo $page->ID.'<br />';
}

EDIT 23-07-2015

Si vous n'avez besoin que des identifiants de page, vous utilisez alors get_posts, puis vous ne passez que page en tant que post_type et la valeur 'idsasfields`. Cela assurera une requête beaucoup plus rapide et beaucoup plus optimisée, car nous ne renverrons que la colonne post id dans la base de données et pas toutes pour les pages données.

( Nécessite PHP 5.4+ )

$args = [
    'post_type' => 'page',
    'fields' => 'ids',
    'nopaging' => true,
    'meta_key' => '_wp_page_template',
    'meta_value' => 'page-special.php'
];
$pages = get_posts( $args );
foreach ( $pages as $page ) 
    echo $page . '</br>';
33
Pieter Goosen

Si votre modèle de page se trouve dans un sous-dossier, dossier-thème/page-templates/page-template.php, la requête ci-dessous fonctionnera:

$page_details = get_pages( array(
 'post_type' => 'page',
 'meta_key' => '_wp_page_template',
 'hierarchical' => 0,
 'meta_value' => 'page-templates/page-template.php'
));

Les codes ci-dessus affichent également des sous-pages.

Merci

2
Sushil Adhikari

Ce qui suit est un script légèrement plus articulé qui prend en compte une langue, si nécessaire. Notez que cela suppose l'utilisation de Polylang, pas de WPML.

function get_post_id_by_template($template,$lang_slug = null){
  global $wpdb;
  $wh = ($lang_slug) ? " AND t.slug = %s" : "";

  $query = $wpdb->prepare(
    "SELECT DISTINCT p.ID
    FROM $wpdb->posts p
    INNER JOIN $wpdb->postmeta meta ON meta.post_id = p.ID
    INNER JOIN $wpdb->term_relationships tr ON meta.post_id = tr.object_id
    INNER JOIN $wpdb->term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
    INNER JOIN $wpdb->terms t ON tt.term_id = t.term_id
    WHERE p.post_status = 'publish' AND meta.meta_key = %s AND meta.meta_value = %s" . $wh,
    '_wp_page_template',
    $template,
    $lang_slug
  );

  $ids = $wpdb->get_results($query);

  if($ids && isset($ids[0])){
    $p = $ids[0];
    return $p->ID;
  } else {
    return false;
  }
}// get_post_id_by_template
0
Luca Reghellin