como obter o ID da página usando o slug de página

35

Eu sou muito novo no wordpress e eu queria saber se eu poderia obter um page idcom ele slug. É possível, por favor me avise.

esquisito
fonte

Respostas:

47

Use get_page_by_path($page_path):

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

Isso retornará um objeto de postagem regular.

fuxia
fonte
E se for o ID de uma página filha que eu quero?
louca
11
@freaky A função leva apenas a página lesma, não a mãe lesma. Como as lesmas são únicas, você sempre terá apenas uma página.
fuxia
3
Obrigado que está trabalhando e para a página criança eu tinha para navegar como sucessos$page = get_page_by_path( 'about/child' );
esquisitos
Apenas para esclarecer, get_page_by_pathusa o post_namecampo internamente, não post_slug.
colefner
Só para esclarecer, isso usa o caminho da página e não o nome da página, correto? Em seguida, uma página chamada "Sobre nós", o argumento deve ser "sobre nós", correto? sem começo ou barras à direita?
User658182
16

Eu tenho usado isso ..

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

Espero que isso ajude alguém.

Ibnul Hasan
fonte
Por que envolvê-lo em uma função? get_page_by_pathjá retorna nulo…
GDY
Como a pergunta do OP deseja retornar o ID, não o objeto da página.
user1158023
9

Já foi solicitado e respondido neste fórum. Estou colando o mesmo código a partir daí. Use esta função para recuperar o ID da página.

 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
fonte
3

Tive problemas com a resposta escolhida ao tentar usar o código várias vezes na mesma página. Continuava exibindo todo o conteúdo das minhas páginas ao mesmo tempo em todas as instâncias. Então, voltei a pensar e criei essa abordagem mais simples, com base na documentação do WordPress Codex :

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

Talvez ainda possa ser útil para alguém por aí; D

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

Espero que esta sugestão seja útil para alguém.

Dipika
fonte
0

Muitas respostas aqui parecem muito complexas ou não descrevem como obter o ID da página especificamente.

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

Na descrição acima, atribuímos o objeto post a $ page - Depois de ter o objeto post, você pode obter qualquer uma das informações descritas aqui: https://codex.wordpress.org/Class_Reference/WP_Post

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

e muito mais

dbmpls
fonte