WordPress как на ладони

do_robots()WP 2.1.0

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

В WP эта функция зацеплена на одноименный хук do_robots, который срабатывает в файле template-loader.php для URL /robots.txt:

// Process feeds and trackbacks even if not using themes.
if ( is_robots() ) :
	/**
	 * Fired when the template loader determines a robots.txt request.
	 *
	 * @since 2.1.0
	 */
	do_action( 'do_robots' );
	return;
elseif ( is_feed() ) :
	...

Изменить результат этой функции (код файла) можно через хуки:

  • do_robotstxt — событие срабатывает в начале функции. На этом хуке можно вывести какой либо текст и он будет выведен в файле robots.txt перед базовым кодом файла.
  • robots_txt — фильтр срабатывает в конце и фильтрует код (текст) файла robots.txt.

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

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

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

Хуки из функции

Возвращает

null. Ничего (null).

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

do_robots();

Примеры

0

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

Добавим правило "Disallow: */comments":

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

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

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

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

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

add_action( 'do_robotstxt', 'my_robotstxt' );
function my_robotstxt(){

	$lines = [
		'User-agent: *',
		'Disallow: /wp-admin/',
		'Disallow: /wp-includes/',
		'',
	];

	echo implode( "\r\n", $lines );

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

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

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

Список изменений

С версии 2.1.0 Введена.
С версии 5.3.0 Remove the "Disallow: /" output if search engine visibility is discouraged in favor of robots meta HTML tag via wp_robots_no_robots() filter callback.

Код do_robots() WP 6.5.2

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

	$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 The robots.txt output.
	 * @param bool   $public Whether the site is considered "public".
	 */
	echo apply_filters( 'robots_txt', $output, $public );
}
9 комментариев
    Войти