Obtener la identificación de la página por plantilla

14

Quiero saber si es posible obtener el ID de una página con una plantilla específica. ¿Es posible obtener el ID de una página asignada a "page-special.php"?

    
pregunta user3800799 02.11.2014 - 09:01

3 respuestas

32

Cuando se crea una página, la plantilla asignada a esa página se guarda como meta personalizada de la misma forma que los campos personalizados. El meta_key es _wp_page_template y el meta_value será la plantilla de la página

Simplemente puede hacer uso de get_pages para recuperar todas las páginas que tienen un meta_value de la plantilla especificada

$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 uno solo necesita los ID de página, entonces usa get_posts y luego pasa page como post_type y el valor de 'ids as fields'. Esto asegurará una consulta mucho más rápida y mucho más optimizada, ya que solo devolveremos la columna de ID de publicación en la base de datos y no todas para las páginas dadas

( Requiere 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>';
    
respondido por el Pieter Goosen 02.11.2014 - 09:20
2

Si su plantilla de página se encuentra dentro de la subcarpeta, carpeta de tema / página-plantillas / página-plantilla.php, la siguiente consulta funcionará:

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

Los códigos anteriores también muestran subpáginas también.

Gracias

    
respondido por el sushil adhikari 06.02.2018 - 23:51
0

El siguiente es un script un poco más articulado que tiene en cuenta un idioma, si es necesario. NOTA que asume el uso de Polylang, no 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
    
respondido por el Stratboy 20.08.2018 - 14:52

Lea otras preguntas en las etiquetas