wake-up-neo.com

Seiten-ID anhand einer Vorlage abrufen

Ich möchte wissen, ob es möglich ist, die ID einer Seite mit einer bestimmten Vorlage abzurufen. Ist es möglich, die ID einer Seite zu ermitteln, die "page-special.php" zugewiesen wurde?

16
user3800799

Beim Erstellen einer Seite wird die dieser Seite zugewiesene Vorlage wie benutzerdefinierte Felder als benutzerdefiniertes Post-Meta gespeichert. Der meta_key ist _wp_page_template und der meta_value ist die Seitenvorlage

Sie können einfach get_pages verwenden, um alle Seiten abzurufen, die einen meta_value der angegebenen Vorlage haben

$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

Wenn man nur die Seiten-IDs benötigt, benutzt man get_posts und übergibt dann einfach page als post_type und 'idsasfields'-Wert. Dies stellt eine viel schnellere und optimierte Abfrage sicher, da nur die Post-ID-Spalte in der Datenbank und nicht alle für die angegebenen Seiten zurückgegeben werden

( Erfordert 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

Befindet sich Ihre Seitenvorlage im Unterordner theme-folder/page-templates/page-template.php, funktioniert die folgende Abfrage:

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

Die obigen Codes zeigen auch Unterseiten an.

Vielen Dank

2
Sushil Adhikari

Das Folgende ist ein etwas artikulierteres Skript, das bei Bedarf eine Sprache berücksichtigt. HINWEIS: Es wird die Verwendung von Polylang und nicht von WPML vorausgesetzt.

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