Функция get_page_by_path() в WordPress предоставляет удобный способ получения объекта страницы или другого типа поста по указанному пути URL. Она особенно полезна при необходимости работы с иерархическими страницами или кастомными типами постов, где путь может включать несколько уровней.
Функция get_page_by_path() возвращает объект страницы, поста или null, если запись с указанным путем не найдена. При этом результат кэшируется для повышения производительности.
get_page_by_path( string $page_path = '', string $output = 'OBJECT', string|array $post_type = 'page' )
Параметры
$page_path(string) — Путь страницы или поста, который вы хотите получить. Это может быть полный путь для иерархических типов записей (например,main-section/sub-section) или просто ярлык для не иерархических типов (например,post-tag). Слэши в начале и в конце пути будут удалены.$output(string) — Формат возвращаемого результата. Возможные значения:'OBJECT'(по умолчанию) — возвращает объектWP_Post.'ARRAY_N'— возвращает нумерованный массив.'ARRAY_A'— возвращает ассоциативный массив.
$post_type(string|array) — Тип записи, который следует искать. По умолчанию это'page'. Можно указать несколько типов постов в виде массива, например['article', 'page']. Если указать только строку, то также будет включен тип записиattachment.
Функция возвращает:
- Объект
WP_Postили массив, если запись найдена. null, если запись не найдена.
Пример 1: Получение страницы по пути
Предположим, у нас есть дочерняя страница с URL https://example.com/main-section/sub-section. Чтобы получить эту страницу, мы можем использовать следующий код:
// Получаем страницу по пути
$page = get_page_by_path('main-section/sub-section');
// Или так
$page = get_page_by_path('/main-section/sub-section/');
Важно: Если указать только имя страницы, например 'sub-section', функция не найдет страницу, если она является дочерней. Однако, если страница не имеет родительских страниц, использование её ярлыка (slug) будет корректным:
// Если страница не имеет родителя
$page = get_page_by_path('section-name'); // Возвращает объект WP_Post{ ... }
Пример 2: Использование с новыми типами записей
Для новых типов записей, путь может включать название типа записи. Например, если у вас есть тип записи vehicle, и URL записи выглядит как https://example.com/vehicle/tesla, то для получения такой записи нужно указать только её ярлык:
// Правильное использование
$page = get_page_by_path('tesla', OBJECT, 'vehicle');
// Неправильное использование (ничего не вернет)
$page = get_page_by_path('vehicle/tesla', OBJECT, 'vehicle');
Если вы указываете тип записи, например 'vehicle', запрос автоматически также включает тип attachment. Если вы хотите исключить тип attachment, используйте массив:
// Запрос только для типа 'vehicle'
$page = get_page_by_path('tesla', OBJECT, ['vehicle']);
Если вам нужно получить последнюю часть пути, можно использовать функции basename() и untrailingslashit():
$page_path = 'vehicle/tesla/';
$post_name = basename(untrailingslashit($page_path));
$page = get_page_by_path($post_name, OBJECT, 'vehicle');
Пример 3: Практический пример
Допустим, у вас есть страница с адресом https://example.com/contact/, и вы хотите получить объект этой страницы, чтобы использовать её данные в шаблоне.
// Получаем объект страницы по пути
$page = get_page_by_path('contact');
// Проверяем, существует ли страница
if ( $page ) {
// Выводим заголовок страницы
echo '<h1>' . esc_html( get_the_title( $page->ID ) ) . '</h1>';
// Выводим содержание страницы
echo apply_filters( 'the_content', $page->post_content );
} else {
// Выводим сообщение, если страница не найдена
echo 'Страница не найдена.';
}
Объяснение примера
- Получение объекта страницы: Мы вызываем
get_page_by_path('contact'), чтобы получить объект страницы с указанным путём. - Проверка существования страницы: Проверяем, существует ли страница, проверяя, не является ли результат
null. - Вывод заголовка и содержания: Если страница найдена, используем
get_the_title()для получения заголовка иapply_filters('the_content', $page->post_content)для обработки содержания страницы через фильтры контента. - Обработка отсутствия страницы: Если страница не найдена, выводим сообщение об ошибке.
Заключение
Функция get_page_by_path() является мощным инструментом для работы с страницами и постами в WordPress, позволяя эффективно получать записи по их пути. Это особенно полезно для динамического получения данных и работы с иерархическими структурами страниц. Правильное использование функции поможет вам оптимизировать запросы и упростить код вашего сайта.