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.

bizarre
la source

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.

fuxia
la source
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.

Ibnul Hasan
la source
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; 
  }
Vikas Bhardwaj
la source
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

Rodrigo D'Agostino
la source
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.

Dipika
la source
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

dbmpls
la source