get_page_by_path()
Получает запись по указанному пути этой страницы: parent-page/sub-page. Результат кэшируется.
Можно указать ярлык (имя, post_name, slug) для не древовидных типов записей. Т.е. так можно получить пост по имени.
Можно указать с каким типом записи работать, по умолчанию page
.
Для древовидных типов записей в первый параметр нужно указать полный путь! Например, если указать только 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 | Введена. |