как получить id страницы используя её slug

13 июн. 2013 г., 13:53:37
Просмотры: 159K
Голосов: 52

Я довольно новичок в WordPress и хотел бы узнать, можно ли получить page id страницы, используя её slug. Это возможно, пожалуйста, подскажите?

0
Все ответы на вопрос 7
6
76

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

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

Эта функция вернет стандартный объект записи.
Документация:
https://developer.wordpress.org/reference/functions/get_page_by_path/
https://developer.wordpress.org/reference/functions/get_the_title/

13 июн. 2013 г. 13:57:54
Комментарии

Что если мне нужен ID дочерней страницы?

freaky freaky
13 июн. 2013 г. 14:10:24

@freaky Функция принимает только slug страницы, а не slug родителя. Поскольку slugs уникальны, вы всегда получите только одну страницу.

fuxia fuxia
13 июн. 2013 г. 14:12:26

Спасибо, это работает, а для дочерней страницы пришлось указать путь так $page = get_page_by_path( 'about/child' );

freaky freaky
13 июн. 2013 г. 14:15:38

Просто для уточнения, функция get_page_by_path внутри использует поле post_name, а не post_slug.

colefner colefner
9 апр. 2018 г. 22:04:07

Просто чтобы уточнить, здесь используется путь страницы, а не её название, верно? То есть для страницы с названием "О нас" аргументом должно быть "about-us", правильно? Без начальных или конечных слешей?

user658182 user658182
25 июл. 2018 г. 19:01:46

Да, @user658182

fuxia fuxia
25 июл. 2018 г. 21:57:30
Показать остальные 1 комментариев
2
23

Я использовал эту функцию..

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

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

13 мар. 2015 г. 13:38:53
Комментарии

Зачем оборачивать это в функцию? get_page_by_path и так возвращает null …

GDY GDY
1 мар. 2019 г. 09:42:10

Потому что в вопросе автора нужно вернуть ID, а не объект страницы.

user1158023 user1158023
16 окт. 2019 г. 17:34:01
0
11

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

 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; 
  }
13 июн. 2013 г. 14:06:53
0

Функция url_to_postid существует в WordPress начиная с версии 1.0.0 :) Эту задачу проще всего выполнить с помощью данной функции.

url_to_postid

Если страница находится на верхнем уровне, достаточно указать только её ярлык (slug).

Например: url_to_postid('slug');

Если страница находится на более низком уровне иерархии (т.е. имеет родительскую страницу), необходимо добавить ярлык родителя через слеш:

url_to_postid('parent-slug/child-slug');

Примечание: если функция возвращает 0, следует сбросить постоянные ссылки (откройте страницу настроек постоянных ссылок в админке WordPress) - обычно это нужно сделать только один раз

1 сент. 2020 г. 00:05:35
0

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

8 окт. 2016 г. 18:20:51
0

Много ответов здесь кажутся слишком сложными или не объясняют, как именно получить ID страницы.

            $page = get_page_by_path("ваш-слаг-страницы");
            if ($page) {
                $page_id =  $page->ID;
                echo $page_id;
            }

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

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

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

6 апр. 2019 г. 00:47:07
0
<?php  function get_page_ID_by_slug( $slug ) {
    $page = get_page_by_path( $slug );
    if ( $page ) {
        return (int) $page->ID;
    }
    else {
        return null;
    }
}
?>

Надеюсь, это решение окажется полезным для кого-то.

31 мая 2018 г. 13:18:08