Obtenir l'identifiant de la page par modèle

14

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

    
posée user3800799 02.11.2014 - 09:01

3 réponses

32

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 le 23-07-2015

Si vous n'avez besoin que des identifiants de page, vous utilisez alors get_posts , puis vous ne transmettez que page en tant que post_type et la valeur 'ids as fields'. 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>';
    
réponse donnée Pieter Goosen 02.11.2014 - 09:20
2

Si votre modèle de page réside dans un sous-dossier, un 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

    
réponse donnée sushil adhikari 06.02.2018 - 23:51
0

Ce qui suit est un script légèrement plus articulé qui prend en compte un langage, 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
    
réponse donnée Stratboy 20.08.2018 - 14:52

Lire d'autres questions sur les étiquettes