get_page_by_title

Получает данные записи (страницы, поста, произвольного типа записи) по переданному заголовку записи.

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

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

Так как функция использует сравнение MySQL ‘=‘, заголовок чаще всего не чувствителен к регистру, зависит от настроек MySQL.

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

Не рекомендую использовать эту функцию в цикле, для постов, только для удобства. Прежде чем использовать эту функцию обдумайте как она будет работать. Имейте ввиду, что запрос создаваемый этой функций не такой легкий, как например получение записи по ID. Функция ищет совпадения в таблице, ищет по неиндексированному столбцу, поэтому ей придется проверить все строки совпадающие с типом записи. Поэтому тут по умолчанию стоит тип page, обычно там не более 10 записей.
✈ 1 раз = 0.0015с = очень медленно | 50000 раз = 19.42с = медленно PHP 7.0.2, WP 4.4.1

Хуков нет.

Возвращает

Объект, массив, зависит от параметра $output (OBJECT, ARRAY_N, or ARRAY_A). Если запись не была найдена, то вернет null. Данные возвращаемого массива, полностью совпадают с полями таблицы wp_posts.

Использование

get_page_by_title( $page_title, $output, $post_type );
$page_title(строка) (обязательный)
Заголовок записи (поста, страницы) данные которой нужно получить.
$output(строка)
Формат вывода найденной записи. Может быть:
OBJECT – возвращать как объект;
ARRAY_N – возвращать как нумерованный массив;
ARRAY_A – возвращать как ассоциативный массив.
По умолчанию: OBJECT
$post_type(строка/массив)
Название типа поста. Для постов это ‘post’. Можно указать несколько типов в массиве: array('post', 'page');.
По умолчанию: ‘page’

Примеры

#1 Получим данные страницы

Есть страница с заголовком “О сайте”. Нам нужно получить объект данных этой страницы (все данные строки таблицы wp_posts в базе данных):

<?php
function get_page_by_title( $page_title, $output = OBJECT, $post_type = 'page' ) {
	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 );
	}
}