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