Как я могу проверить, существует ли пост с определенным слагом или заголовком?

Вопрос или проблема

Я хочу узнать, существует ли конкретная страница. Я хотел бы проверить либо по её слагу, либо по её заголовку.

Существует функция под названием ‘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.

Оцените материал
Добавить комментарий

Капча загружается...