WordPress как на ладони
Наставник Трепачёв Д.П., phphtml.net wordpress jino

do_robots() WP 2.1

Выводит на экран контент для файла robots.txt. Устанавливает HTTP заголовок файла. С её помощью создается динамический файл robots.txt.

Создавать файл robots.txt лучше с помощью этой функции, чтобы дать возможность плагинам изменять ваш robots.txt.

Функция do_robots() использует: событие do_robotstxt (в начале функции) и фильтр robots_txt в конце (фильтрует содержание выводимой информации).

Функция устанавливает HTTP заголовок, поэтому использование её внутри HTML файла приведет к ошибке.

header( 'Content-Type: text/plain; charset=utf-8' );

О файле robots.txt и правилах его создания, вы можете почитать в этой моей статье.

Хуки из функции:
Возвращает

Строку. Текст файла robots.txt

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

do_robots();

Примеры

#1. Создадим динамический robots.txt

Через файл темы functions.php. В этом случае создавать файл robots.txt физически не нужно. Добавим такой код в начало файла:

add_action( 'do_robotstxt', 'my_robotstxt' );
function my_robotstxt() {
	echo 'User-agent: *' . PHP_EOL;
	echo 'Disallow: /wp-admin/' . PHP_EOL;
	echo 'Disallow: /wp-includes/' . PHP_EOL;

	die; // обрываем работу PHP
}

Теперь, пройдя по ссылке http://site.ru/robots.txt мы получим такой текст:

User-agent: *
Disallow: /wp-admin/
Disallow: /wp-includes/

#2. Внедримся в robots.txt и изменим его через фильтр robots_txt

Добавим правило "Disallow: */comments". Перед вставленным кодом (пример выше) установим такой хук:

add_filter('robots_txt', 'add_robotstxt');
function add_robotstxt($text){
	$text .= "Disallow: */comments";
	return $text;
}

Пройдя по ссылке http://site.ru/robots.txt получим примерно такой текст:

User-agent: *
Disallow: /wp-admin/
Disallow: /wp-includes/
Disallow: */comments

Код do robots: wp-includes/functions.php WP 4.8.1

<?php
function do_robots() {
	header( 'Content-Type: text/plain; charset=utf-8' );

	/**
	 * Fires when displaying the robots.txt file.
	 *
	 * @since 2.1.0
	 */
	do_action( 'do_robotstxt' );

	$output = "User-agent: *\n";
	$public = get_option( 'blog_public' );
	if ( '0' == $public ) {
		$output .= "Disallow: /\n";
	} else {
		$site_url = parse_url( site_url() );
		$path = ( !empty( $site_url['path'] ) ) ? $site_url['path'] : '';
		$output .= "Disallow: $path/wp-admin/\n";
		$output .= "Allow: $path/wp-admin/admin-ajax.php\n";
	}

	/**
	 * Filters the robots.txt output.
	 *
	 * @since 3.0.0
	 *
	 * @param string $output Robots.txt output.
	 * @param bool   $public Whether the site is considered "public".
	 */
	echo apply_filters( 'robots_txt', $output, $public );
}

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

Из раздела: Без рубрики

do_robots 6 комментариев
  • Александр
    @

    как отключить программную генерацию роботса, чтобы можно было работать с текстовым файлом в корне?

    Ответить3.4 года назад #
    • Kama4477

      Создайте файл в корне и все.

      Ответить3.4 года назад #
      • Александр
        @

        он создан, но выводится две строки по умолчанию, а не то, что я в нем писал(
        вероятно, программную генерацию можно отключить с помощью remove_action например, но я в этом не разбираюсь((

        Ответить3.4 года назад #
        • Kama4477

          Может у вас какой-то SEO плагин стоит, попробуйте отключить соответствующие плагины. По умолчанию так быть не должно. Если плагин вызывает функцию, то надо в нем смотреть, как её выключить.

          Ответить3.4 года назад #
  • Петр

    Здравствуйте, Кама! Пытаюсь настроить robots.txt с помощью этой функции. Чтобы скрыть от индексации папку includes, я добавляю такой код:

    add_filter('robots_txt', 'add_robotstxt');
    function add_robotstxt($text){
    	$text .= "Disallow: /wp-includes";
    	return $text;
    }

    Корректно ли такое написание? И как можно добавить директивы именно для робота яндекс, чтобы указать главное зеркало?
    User-agent: Yandex
    Host: site.ru

    Ответить2.2 года назад #
    • Kama4477

      Если это ваш сайт, расположите лучше файл robots.txt в корне сайта. Подробнее здесь. yes

      Ответить2.2 года назад #

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

Ваш комментарий