Obtenha o ID da página por modelo

14

Eu quero saber se é possível obter o ID de uma página com um modelo específico. É possível obter o ID de uma página atribuída a "page-special.php"?

    
por user3800799 02.11.2014 / 09:01

3 respostas

32

Quando uma página é criada, o modelo atribuído a essa página é salvo como pós-meta personalizado da mesma forma que os campos personalizados. O meta_key é _wp_page_template e o meta_value será o modelo de página

Você pode simplesmente usar get_pages para recuperar todas as páginas que têm meta_value do modelo especificado

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

EDITAR 23-07-2015

Se alguém precisar apenas dos IDs de página, use get_posts e passe os valores page as post_type e 'ids as fields'. Isso garantirá uma consulta muito mais rápida e muito mais otimizada, já que apenas retornaremos a coluna post id no banco de dados e nem todas para as páginas fornecidas

( requer 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>';
    
por Pieter Goosen 02.11.2014 / 09:20
2

Se o seu modelo de página residir na subpasta, na pasta-tema / modelos de página / page-template.php, a consulta abaixo funcionará:

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

Estes códigos acima também exibem subpáginas também.

Obrigado

    
por sushil adhikari 06.02.2018 / 23:51
0

O seguinte é um script ligeiramente mais articulado que leva em consideração um idioma, se necessário. Observe que ele pressupõe o uso de Polylang, não o 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
    
por Stratboy 20.08.2018 / 14:52