Вопрос или проблема
Я хочу узнать, существует ли конкретная страница. Я хотел бы проверить либо по её слагу, либо по её заголовку.
Существует функция под названием ‘post_exists’. Но эта функция, похоже, работает только если её вызывает в хуках, применимых к административным экранам.
Есть ли похожая функция, которую можно использовать в других контекстах?
Вы можете использовать get_page_by_title()
или get_page_by_path()
.
По умолчанию обе возвращают объект WP_Post
страницы, из которого вы можете извлечь данные. Если страница не существует, они вернут null
.
Вы также можете использовать их для типов записей, отличных от встроенного page
.
// По слагу.
$slug = 'sample-page';
$page_by_slug = get_page_by_path( $slug );
// По заголовку.
$title="Sample Page";
$page_by_title = get_page_by_title( $title );
Ответ или решение
Для проверки существования поста с определённым слагом или заголовком в WordPress можно воспользоваться несколькими функциями, которые позволяют получить объект поста и проверить его наличие. Данный подход актуален не только для админ-панели, но и для использования в различных контекстах вашего приложения.
Проверка существования поста по слагу
Чтобы выяснить, существует ли страница с определённым слагом, вы можете использовать функцию get_page_by_path()
. Эта функция ищет страницу по заданному слагу и возвращает объект WP_Post
, если страница найдена, или null
, если её нет.
Пример кода для проверки существования по слагу:
$slug = 'sample-page'; // Замените на ваш слаг.
$page_by_slug = get_page_by_path($slug);
if ($page_by_slug) {
// Страница существует, можно получить её данные:
$page_id = $page_by_slug->ID;
// Дополнительные действия с постом...
} else {
// Страница не найдена:
echo 'Страница не существует.';
}
Проверка существования поста по заголовку
Второй подход — использование функции get_page_by_title()
, которая работает аналогичным образом, но по заголовку поста. Она также возвращает объект WP_Post
или null
, если пост не найден.
Пример кода для проверки существования по заголовку:
$title = "Sample Page"; // Замените на ваш заголовок.
$page_by_title = get_page_by_title($title);
if ($page_by_title) {
// Страница существует:
$page_id = $page_by_title->ID;
// Дополнительные действия с постом...
} else {
// Страница не найдена:
echo 'Страница не существует.';
}
Альтернативное решение: WP_Query
Если необходимо провести более сложный запрос — например, проверить наличие страницы с определённым слагом или заголовком в каком-то конкретном типе поста (не только page
), можно использовать класс WP_Query
. Вот как это можно реализовать:
$args = array(
'name' => 'sample-page', // Замените на ваш слаг
'post_type' => 'any', // Или указать конкретный тип поста
'post_status' => 'publish',
'numberposts' => 1,
);
$posts = get_posts($args);
if ($posts) {
// Страница найдена
$page_id = $posts[0]->ID;
} else {
// Страница не найдена
echo 'Страница не существует.';
}
Заключение
При использовании указанных функций вы можете легко проверить существование страниц или постов в WordPress как по слагу, так и по заголовку. Эти методы не требуют зависимостей от контекста выполнения, что делает их достаточно гибкими. Выбор подходящего метода зависит от ваших потребностей и конкретного сценария использования. Эти инструменты позволяют разработчикам эффективно управлять содержимым и обеспечивают гибкость в разработке функционала на базе WordPress.