get_page_by_path()
Получает запись по указанному пути этой страницы: parent-page/sub-page. Результат кэшируется.
Можно указать с каким типом записи работать. По умолчанию page.
Для не древовидных типов записей, можно получить пост по ярлыку (post_name, slug).
Для древовидных типов записей в первый параметр нужно указать полный путь! Если указать только slug и это дочерняя страница, то функция не найдет страницу. Например, URL записи /parent_name/child_name, если указать только имя child_name, то функция не найдет пост.
Эта функция лежит в основе распознования текущего запроса для постоянных страниц на базе ЧПУ: запросов вида: index.php?pagename=parent-page/sub-page.
Используйте get_page_by_title(), чтобы получить запись по заголовку.
Хуков нет.
Возвращает
WP_Post|Массив|null.
- 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.- Если указать в виде массива: ['post', 'page'] или ['post'], то поиск будет вестись именно по указанным типам записей.
- Если указать в виде строки, то к нему будет также добавлен тип записи
attachment.
По умолчанию: 'page' (становится 'page, attachment')
Примеры
#1 Получим страницу по её пути
Предположим у нас есть дочерняя страница, к которой мы обращаемся по URL example.com/parent-page/sub-page: parent-page/sub-page - это путь страницы. Теперь, где-то в коде получим эту страницу.
$page = get_page_by_path( 'parent-page/sub-page' ); // или так $page = get_page_by_path( '/parent-page/sub-page/' ); print_r( $page );
ВАЖНО! Если указать просто имя страницы, то функция ничего не вернет
$page = get_page_by_path( 'sub-page' ); //> NULL
Однако, если страница не дочерняя, то нужно указывать просто имя страницы - ярлык (slug).
$page = get_page_by_path( 'page-name' ); //> WP_Post{ ... } #2 Использование с новыми типами записей
Есть новый тип записи, путь до такой записи, обычно претворен названием типа записи. Например, тип записи называется car, URL конкретной записи: example.com/car/lada. Чтобы получить такую запись, нужно использовать только её ярлык:
// Правильный вариант $page = get_page_by_path( 'lada', OBJECT, 'car' ); // НЕ правильный (ничего не вернет) $page = get_page_by_path( 'car/lada', OBJECT, 'car' );
Авто-добавление типа attachment
// запрос будет: post_type IN ( 'car', 'attachment' ) $page = get_page_by_path( 'lada', OBJECT, 'car' ); // запрос будет: post_type IN ( 'car' ) $page = get_page_by_path( 'lada', OBJECT, ['car'] );
Получение последний части пути
Чтобы получить последнюю часть пути можно использовать функции basename() и untrailingslashit():
$page_path = 'car/lada/'; $post_name = basename( untrailingslashit( $page_path ) ); $page = get_page_by_path( $post_name , OBJECT, 'car');
Заметки
- Global. wpdb. $wpdb WordPress database abstraction object.
Список изменений
| С версии 2.1.0 | Введена. |