get_page_by_title() WP 2.1.0

Отримує запис (сторінку, пост, довільний тип запису) за переданим заголовком запису.

Якщо знайдено кілька записів з однаковим заголовком, буде повернено запис із меншим 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

Хуків немає.

Повертає

WP_Post|Массив|null.

  • OBJECT, ARRAY_N, ARRAY_A – залежить від параметра $output. Дані масиву, що повертається, повністю збігаються з полями таблиці wp_posts .

  • null – якщо запис не було знайдено.

Використання

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’

Приклади

0

#1 Отримаємо дані сторінки

Є сторінка із заголовком “Про сайт”. Нам потрібно отримати об’єкт даних цієї сторінки (всі дані рядка таблиці wp_posts у базі даних):

$ppp = get_page_by_title('Про сайт');

/*
$ppp міститиме:

WP_Post Object
(
	[ID] => 7
	[post_author] => 1
	[post_date] => 2010-03-28 15:31:00
	[post_date_gmt] => 2010-03-28 11:31:00
	[post_content] => Контент запису. Зазвичай тут багато написано:)
	[post_title] => Про сайт / Про автора
	[post_excerpt] =>
	[post_status] => publish
	[comment_status] => open
	[ping_status] => closed
	[post_password] =>
	[post_name] => про
	[to_ping] =>
	[pinged] =>
	[post_modified] => 2014-04-21 01:23:20
	[post_modified_gmt] => 2014-04-20 21:23:20
	[post_content_filtered] =>
	[post_parent] => 0
	[guid] => http://wp-kama.ru/about
	[menu_order] => 0
	[post_type] => page
	[post_mime_type] =>
	[comment_count] => 116
	[filter] => raw
)
*/

Отримавши об’єкт посту, ми можемо дізнатися різні дані запису. Наприклад, так ми можемо дізнатися ID запису за заголовком:

$ppp = get_page_by_title('Про сайт');
echo $ppp->ID; // ID запису
echo $ppp->post_content; // контент запису
0

#2 Виключимо сторінку зі списку за заголовком

Припустимо, ми виводимо в меню сторінки. Але нам не потрібно виводити в це меню сторінку із заголовком “Контакти”. Виключаємо так:

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

нотатки

  • Global. wpdb. $wpdb WordPress database abstraction object.

список змін

З версії 2.1.0Введено.
З версії 3.0.0$post_type parameter був added.

Код get_page_by_title() WP 6.0.2

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);
	}

	return null;
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *