WordPress как на ладони
Новые WordPress шаблоны Хостинг, VPS/VDS и отдельные сервера только на SSD дисках. 7 дней бесплатного тестирования.

is_robots() WP 2.1.0

Проверяет запрос ли это к файлу robots.txt. Условные тег.

Если в корне сайта нет физического файла robots.txt то WordPress создает (генерирует) такой файл и для такого запроса будет срабатывать этот условный тег.

Также для такого запроса к файлу robots.txt которого физически не существует, срабатывает хук:

do_action( 'do_robots' );

Эта функция это обертка для конструкции:

global $wp_query;
$wp_query->is_robots();
✈ 1 раз = 0.000014с = очень быстро | 50000 раз = 0.02с = скорость света PHP 7.1.2, WP 4.7.3

Хуков нет.

Возвращает

true/false.

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

if( is_robots() ){
	// это файл робота
}

Код is_robots: wp-includes/query.php VER 4.9.8

<?php
function is_robots() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_robots();
}

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

Из метки: Условные теги (типов страниц и запросов )

Еще из метки: Условные теги (все)

Еще из раздела: Основной запрос WP

1 коммент
  • @ Pavel cайт: pavlov-pavel.ru

    А как сделать, чтобы если сайт открывается по двум доменам (site.ru, site.by), подставлятся нужный файл вместо общего robots.txt?
    Пробовал прописать в .htaccess:

    <IfModule mod_rewrite.c>
    Options +FollowSymLinks
    RewriteEngine On
    
    RewriteCond %{HTTP_HOST} site.ru [NC]
    RewriteRule ^robots.txt robots_site.ru.txt [L]
    
    RewriteCond %{HTTP_HOST} site.by [NC]
    RewriteRule ^robots.txt robots_site.by.txt [L]
    </IfModule>

    но не работает, т.к. при отсутствии физического файла robots.txt, эта констуркция не срабатывает, а срабатывает функция is_robots() и WP отдаёт код:

    User-agent: *\n
    Disallow: $path/wp-admin/\n
    Allow: $path/wp-admin/admin-ajax.php\n

    Подумал, и понял:
    1) в файле /wp-includes/functions.php меняем код unction do_robots() на свой. (закомметируем вывод того, что написал чуть выше, то есть всё что связано с $output, и добавим свой код:

    if($_SERVER['HTTP_HOST'] == "site.ru" || $_SERVER['HTTP_HOST'] == "www.site.ru") {
    $output = file_get_contents('./robots_site.ru.txt'); }
    elseif($_SERVER['HTTP_HOST'] == "site.by" || $_SERVER['HTTP_HOST'] == "www.site.by") { $output = file_get_contents('./robots_site.by.txt'); }
    	else { $output = "User-agent: *\n"; $output .= "Disallow: /\n"; }

    Ну и понятно, что нужно создать эти файлы (robots_site.ru.txt и robots_site.by.txt).
    Другое дело, что когда WP обновится, скорее всего, файл /wp-includes/functions.php перезапишется и все наши изменения накроются медным тазом. Тут уж либо запрещать обновление WP, либо скопировать себе этот код и проверять functions.php после каждого апдейта...

    Ответить3 месяца назад #
Здравствуйте, !     Войти . Зарегистрироваться