get_page_by_path() WP 2.1.0
Получает запись по указанному пути этой страницы: parent-page/sub-page
. Вместо пути можно указать ярлык (slug). Можно указать тип записи (post_type).
Запрос создаваемый функцией очень похож на такой запрос: index.php?pagename=parent-page/sub-page.
Результат работы функции кэшируется.
Чтобы получить запись по заголовку, используйте get_page_by_title()
Поле post_name
имеет индекс в таблице wp_posts
, поэтому такой запрос должен быть быстрым.
Хуков нет.
Возвращает
WP_Post/массив/ничего.
- WP_Post или массив при успехе.
- null при ошибке.
Использование
get_page_by_path( $page_path, $output, $post_type );
- $page_path(строка) (обязательный)
- Путь страницы, можно указать ярлык (slug).
- $output(строка)
В каком виде нужно получить результат:
OBJECT
- возвращать как объект;ARRAY_N
- возвращать как нумерованный массив;ARRAY_A
- возвращать как ассоциативный массив.
По умолчанию: OBJECT
- $post_type(строка/массив)
- Название типа записи. Для страниц это 'page'. Можно указать несколько в массиве:
array('post', 'page');
.
По умолчанию: 'page'
Примеры
#1 Получим страницу по её пути
Предположим у нас есть дочерняя страница, к которой мы обращаемся по URL site.ru/parent-page/sub-page: parent-page/sub-page
- это путь страницы. Теперь, где-то в коде получим эту страницу.
$page = get_page_by_path('parent-page/sub-page'); // используем $page
Для не дочерней страницы, нужно указывать просто имя страницы - ярлык (slug).
#2 Использование с новыми типами записей
Есть новый тип записи, путь до такой записи, обычно претворен названием типа записи. Например, тип записи называется car
, URL конкретной записи: site.ru/car/lada. Чтобы получить такую запись, нужно использовать только её ярлык:
// Неправильный, ничего не вернет. $page = get_page_by_path( 'car/lada', OBJECT, 'car' ); // Правильный вариант $page = get_page_by_path( 'lada', OBJECT, 'car' );
Получение последний части пути
Чтобы получить последнюю часть пути можно использовать функции basename()
и untrailingslashit()
:
$page_path = 'car/lada/'; $page = get_page_by_path( basename( untrailingslashit( $page_path ) ) , OBJECT, 'car');