как получить идентификатор страницы, используя слаг

35

Я довольно новичок в WordPress, и мне было интересно, смогу ли я получить page idс ним slug. Возможно ли это, пожалуйста, дайте мне знать.

бредовый
источник

Ответы:

47

Используйте get_page_by_path($page_path):

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

Это вернет обычный объект post.

Фуксия
источник
Что если мне нужен идентификатор дочерней страницы?
причудливый
1
@freaky Функция принимает только фрагмент страницы, а не родительский фрагмент. Поскольку слизни уникальны, вы всегда получите только одну страницу.
fuxia
3
Спасибо, это работает, и для детской страницы я должен был перемещаться как хиты$page = get_page_by_path( 'about/child' );
странный
Просто чтобы уточнить, get_page_by_pathиспользует это post_nameполе внутри, а не post_slug.
Colefner
Просто чтобы прояснить, это использует путь страницы, а не имя страницы, правильно? Тогда страница с именем «О нас» должна быть аргументом «о нас», правильно? без начальных или конечных слешей?
user658182
16

Я использовал это ..

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

Надеюсь, это кому-нибудь поможет.

Ибнул Хасан
источник
Зачем оборачивать это в функцию? get_page_by_pathуже возвращает
ноль
Потому что ОП вопрос хочет вернуть ID, а не объект страницы.
user1158023
9

Об этом уже спрашивали и отвечали на этом форуме. Я вставляю тот же код оттуда. Используйте эту функцию для получения идентификатора страницы.

 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

У меня были проблемы с выбранным ответом при попытке использовать код несколько раз на одной странице. Он продолжал отображать все содержимое моих страниц одновременно в каждом случае. Поэтому я вернулся к размышлениям и предложил этот более простой подход, основанный на документации 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();
?>

Может быть, это все еще может быть полезным для кого-то там; 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;
    }
}
?>

Я надеюсь, что это предложение полезно для кого-то.

Dipika
источник
0

Здесь много ответов, которые кажутся слишком сложными или не описывают, как получить идентификатор страницы конкретно.

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

В вышеприведенном описании мы назначили объект post для $ page. Получив объект post, вы можете получить любую информацию, описанную здесь: https://codex.wordpress.org/Class_Reference/WP_Post.

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

и многое другое

dbmpls
источник