WordPress как на ладони
WordCamp Saint Petersburg 2018 wordpress jino

get_page_by_title() WP 2.1

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

Если найдено несколько записей с одинаковым заголовком, то будет возращена запись с меньшим 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 в базе данных):

$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] => about
	[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; // контент записи

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

Предположим мы выводим в меню страницы. Но нам не нужно выводить в это меню страницу с заголовком "Контакты". Исключаем так:

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

Код get page by title: wp-includes/post.php VER 4.9.5

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

Cвязанные функции

Из метки: get_by (получение)

Еще из метки: query (запрос)

Еще из раздела: Запросы

get_page_by_title 4 коммента
  • @ Виталий

    а как выводить контент с авторазметкой

    <p></p>

    ?

    Ответить22 дня назад #
    • newbie23 cайт: yumchief.com
      <p>
      <?php
      $ppp = get_page_by_title('О сайте');
      echo $ppp->post_content;
      ?>
      </p>
      Ответить22 дня назад #
      • @ Виталий

        Нет, я имею ввиду вот что: при обычном просмотре страницы контент автоматически разбивается на абзацы как это отображено в редакторе.
        Если выводить через данную функцию - все выводится в одну строку

        Ответить20 дней назад #
        • @ campusboy2726 cайт: www.youtube.com/c/wpplus
          <?php
          $ppp = get_page_by_title('О сайте');
          echo apply_filters( 'the_content', $ppp->post_content );
          ?>
          2
          Ответить20 дней назад #

Здравствуйте, !

Ваш комментарий
Предпросмотр