Функция 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()
, ее ��аменами и практическими примерами!