So erhalten Sie die Seiten-ID einer Seite mit dem Seiten-Slug

35

Ich bin ziemlich neu in WordPress und ich habe mich gefragt, ob ich eine page idmit ihm bekommen könnte slug. Ist es möglich, lass es mich wissen.

ausgeflippt
quelle

Antworten:

47

Verwendung get_page_by_path($page_path):

$page = get_page_by_path( 'about' );
echo get_the_title( $page );

Dies gibt ein reguläres Post-Objekt zurück.

fuxia
quelle
Was ist, wenn ich die ID einer untergeordneten Seite haben möchte?
Freaky
1
@freaky Die Funktion verwendet nur den Page Slug, nicht den Parent Slug. Da Schnecken einzigartig sind, erhalten Sie immer nur eine Seite.
Fuxia
3
Danke, es funktioniert und für die Kinderseite musste ich wie Hits navigieren$page = get_page_by_path( 'about/child' );
freaky
Nur zur Verdeutlichung get_page_by_pathwird das post_nameFeld intern nicht verwendet post_slug.
Colefner
Nur um klar zu sein, verwendet dies den Seitenpfad und nicht den Seitennamen, richtig? Dann sollte auf einer Seite mit dem Namen "Über uns" das Argument "Über uns" lauten, richtig? ohne Anfang oder abschließende Schrägstriche?
user658182
16

Ich habe das benutzt ..

function get_id_by_slug($page_slug) {
    $page = get_page_by_path($page_slug);
    if ($page) {
        return $page->ID;
    } else {
        return null;
    }
} 

Hoffe das wird jemandem helfen.

Ibnul Hasan
quelle
Warum es in eine Funktion einwickeln? get_page_by_pathgibt bereits null zurück…
GDY
Da die OP-Frage ID zurückgeben möchte, nicht das Seitenobjekt.
user1158023
9

Es wurde bereits in diesem Forum gefragt und beantwortet. Ich füge den gleichen Code von dort ein. Verwenden Sie diese Funktion, um die Seiten-ID abzurufen.

 function get_page_by_slug($page_slug, $output = OBJECT, $post_type = 'page' ) { 
  global $wpdb; 
   $page = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type= %s AND post_status = 'publish'", $page_slug, $post_type ) ); 
     if ( $page ) 
        return get_post($page, $output); 
    return null; 
  }
Vikas Bhardwaj
quelle
3

Ich hatte Probleme mit der gewählten Antwort, als ich versuchte, den Code mehrmals auf derselben Seite zu verwenden. In jedem Fall wurden alle Inhalte meiner Seiten gleichzeitig angezeigt. Also habe ich wieder nachgedacht und mir diesen einfacheren Ansatz ausgedacht, der auf der Dokumentation des WordPress Codex basiert :

<?php $query = new WP_Query( array( 'pagename' => 'about-me' ) );
        while ( $query->have_posts() ) {
        $query->the_post();
        echo '<h2>'. get_the_title() .'</h2>';
        the_content();
    }
    wp_reset_postdata();
?>

Vielleicht kann es immer noch für jemanden da draußen hilfreich sein; D

Rodrigo D'Agostino
quelle
0
<?php  function get_page_ID_by_slug( $slug ) {
    $page = get_page_by_path( $slug );
    if ( $page ) {
        return (int) $page->ID;
    }
    else {
        return null;
    }
}
?>

Ich hoffe, dieser Vorschlag ist für jemanden hilfreich.

Dipika
quelle
0

Viele Antworten hier, die übermäßig komplex erscheinen oder nicht beschreiben, wie die Seiten-ID speziell abgerufen werden kann.

            $page = get_page_by_path("your-page-slug");
            if ($page) {
                $page_id =  $page->ID;
                echo $page_id;
            }

In der obigen Beschreibung haben wir $ page das Beitragsobjekt zugewiesen. Sobald Sie das Beitragsobjekt haben, können Sie eine der hier beschriebenen Informationen abrufen: https://codex.wordpress.org/Class_Reference/WP_Post

            $page->ID
            $page->post_status
            $page->post_title

und vieles mehr

dbmpls
quelle