comment obtenir l'identifiant d'une page en utilisant un slug de page


35

Im assez nouveau pour wordpress et je me demandais si je pouvais obtenir un page idavec ses slug. Est-il possible s'il vous plaît faites le moi savoir.

Réponses:


47

Utiliser get_page_by_path($page_path):

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

Cela retournera un objet post régulier.


Que faire si c'est l'identifiant d'une page enfant que je veux?
Freaky

1
@freaky La fonction ne prend que le slug de page, pas le slug parent. Les slugs étant uniques, vous n’obtiendrez toujours qu’une page.
fuxia

3
Merci cela fonctionne et pour la page enfant j'ai dû naviguer comme des hits$page = get_page_by_path( 'about/child' );
freaky

Juste pour clarifier, get_page_by_pathutilise le post_namechamp en interne, pas post_slug.
colefner

Pour être clair, ceci utilise le chemin de la page et non le nom de la page, n'est-ce pas? Puis une page nommée "À propos de nous", l'argument devrait être "à propos de nous", n'est-ce pas? sans début ou de fin slash?
user658182

16

Je l'utilise ..

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

J'espère que cela aidera quelqu'un.


Pourquoi l'envelopper dans une fonction? get_page_by_pathrenvoie déjà null…
GDY

Parce que la question OP veut renvoyer un identifiant, pas l'objet de page.
user1158023

9

Il a déjà été demandé et répondu sur ce forum. Je colle le même code à partir de là. Utilisez cette fonction pour récupérer l'identifiant de la page.

 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; 
  }

3

J'ai eu des problèmes avec la réponse choisie en essayant d'utiliser le code plusieurs fois dans la même page. Il continuait d'afficher tout le contenu de mes pages en même temps dans tous les cas. Je suis donc revenu à la réflexion et j'ai proposé cette approche plus simple basée sur la documentation du codex WordPress :

<?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();
?>

Peut-être que cela peut toujours être utile pour quelqu'un là-bas; D


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

J'espère que cette suggestion est utile pour quelqu'un.


0

Beaucoup de réponses ici semblent trop complexes, ou ne décrivent pas comment obtenir spécifiquement l'ID de page.

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

Dans la description ci-dessus, nous avons assigné l'objet post à $ page - une fois que vous avez l'objet post, vous pouvez obtenir les informations décrites ici: https://codex.wordpress.org/Class_Reference/WP_Post

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

et beaucoup plus

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.