GET_PAGE_BY_TITLE() в WordPress: работа с записями по заголовку

Функция GET_PAGE_BY_TITLE() │ WP 2.1.0

Внимание! Функция устарела с версии 6.2.0. Она больше не поддерживается и может быть удалена в будущих обновлениях. Используйте вместо нее WP_Query.

Описание функции

Функция GET_PAGE_BY_TITLE() позволяет получить любой тип записи (страницы, поста или пользовательского типа) по заданному заголовку.

Если вы найдете несколько записей с одинаковым заголовком, будет возвращена запись с меньшим идентификатором (ID).

Тип записи, которую нужно получить, указывается в третьем параметре $post_type. По умолчанию поиск будет выполняться среди статических страниц (page).

Учтите, что функция использует оператор равенства (=) в SQL-запросе MySQL, что делает поиск заголовка нечувствительным к регистру в большинстве случаев. Однако это зависит от настроек вашего MySQL.

Если вам нужно получить ID записи по URL, используйте специальную функцию: url_to_postid().

Важно: Не рекомендуется использовать эту функцию везде. Подумайте, как она будет работать. Запрос, генерируемый этой функцией, может быть тяжелым, особенно по сравнению с получением записи по ID. Функция просматривает непроиндексированный столбец таблицы wp_posts, что требует проверки всех строк, соответствующих типу записи. Поэтому по умолчанию типом является page, где, как правило, не более 20 записей.

С версии WP 6.1 используется WP_Query, которая кэширует результаты.

Пример производительности:

  • 1 раз — 0.0015 сек (очень медленно)
  • 50000 раз — 19.42 сек (медленно)
  • Используемые версии: PHP 7.0.2, WP 4.4.1

Возвращаемое значение

Возвращает объект WP_Post (или массив) в случае успеха, или null в случае неудачи.

Использование функции

get_page_by_title( $page_title, $output, $post_type );

Параметры

  • $page_title (string) (обязательный): Заголовок записи (страницы), данные которой вы хотите получить.

  • $output (string): Формат вывода найденной записи. Может быть:

    • OBJECT - вернуть как объект;
    • ARRAY_N - вернуть как числовой массив;
    • ARRAY_A - вернуть как ассоциативный массив.

    По умолчанию: OBJECT.

  • $post_type (string/array): Тип записи или массив типов записей.
    По умолчанию: page.

Примеры использования

Пример 1: Получение данных страницы по заголовку

Предположим, есть страница с заголовком "Обо мне". Нам нужно получить объект данных этой страницы:

$ppp = get_page_by_title('Обо мне');

/*
$ppp будет содержать:

WP_Post Object
(
    [ID] => 7
    [post_author] => 1
    [post_date] => 2010-03-28 15:31:00
    [post_content] => Содержимое поста. Обычно здесь много информации. :)
    [post_title] => Обо мне
    [post_status] => publish
    [comment_status] => open
    [guid] => http://wpexample.com/about
    [post_type] => page
    [comment_count] => 116
)
*/

После получения объекта поста мы можем извлечь разные данные. Например, получить ID по заголовку:

$ppp = get_page_by_title('Обо мне');
echo $ppp->ID;           
echo $ppp->post_content; 

Пример 2: Исключение страницы из списка по заголовку

Предположим, мы выводим меню страниц, но не хотите отображать страницу с заголовком "Контакты" в этом меню.

$page = get_page_by_title('Контакты');
wp_list_pages('exclude=' . $page->ID);

Пример 3: Поиск пользовательского типа записи по заголовку

Ниже мы находим массив $post пользовательского типа записи "book" с заголовком "Мирный мир сейчас":

$mypost = get_page_by_title('Мирный мир сейчас', OBJECT, 'book');

Заметки

  • Глобальные переменные: wpdb - объект абстракции базы данных WordPress.

Изменения в версиях

  • С 2.1.0 — функция введена.
  • С 3.0.0 — добавлен параметр $post_type.
  • Устарела с 6.2.0 — используйте WP_Query вместо нее.

Код функции

function get_page_by_title( $page_title, $output = OBJECT, $post_type = 'page' ) {
    _deprecated_function( __FUNCTION__, '6.2.0', 'WP_Query' );
    global $wpdb;

    if ( is_array( $post_type ) ) {
        $post_type           = esc_sql( $post_type );
        $post_type_in_string = "'" . implode( "','", $post_type ) . "'";
        $sql                 = $wpdb->prepare(
            "SELECT ID
            FROM $wpdb->posts
            WHERE post_title = %s
            AND post_type IN ($post_type_in_string)",
            $page_title
        );
    } else {
        $sql = $wpdb->prepare(
            "SELECT ID
            FROM $wpdb->posts
            WHERE post_title = %s
            AND post_type = %s",
            $page_title,
            $post_type
        );
    }

    $page = $wpdb->get_var( $sql );

    if ( $page ) {
        return get_post( $page, $output );
    }

    return null;
}

Таким образом, теперь вы обладаете всеобъемлющим руководством по использованию функции GET_PAGE_BY_TITLE(), ее ��аменами и практическими примерами!

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *