Функция DO_ROBOTS() в WordPress: использование и настройка для robots.txt

# DO_ROBOTS() │ WP 2.1.0

Функция DO_ROBOTS() отображает содержимое файла robots.txt и устанавливает нужные HTTP-заголовки. Она используется для создания динамического файла robots.txt.

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

```php
// Обрабатывает фиды и трекбеки, даже если не используются темы.
if ( is_robots() ) :
    /**
     * Срабатывает, когда загрузчик шаблонов обрабатывает запрос к robots.txt.
     *
     * @since 2.1.0
     */
    do_action( 'do_robots' );
    return;
elseif ( is_feed() ) :
    ...

Результат этой функции можно изменить с помощью хуков:

  • do_robotstxt — действие, которое срабатывает в начале функции. Вы можете добавить любой текст с помощью этого хука, и он будет отображен перед основным содержимым robots.txt.
  • robots_txt — фильтр, который срабатывает в конце функции и позволяет изменить всё содержимое robots.txt.

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

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

  • do_robotstxt
  • robots_txt

Возврат

  • null: Ничего не возвращается.

Примеры

Пример 1: Изменение содержимого robots.txt с помощью фильтра robots_txt

Давайте добавим правило "Disallow: */comments".

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

Теперь по адресу http://example.com/robots.txt будет содержимое:

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

Пример 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( "rn", $lines );

    die; // Завершаем выполнение PHP
}

Теперь, когда вы перейдете по адресу http://example.com/robots.txt, будет отображаться следующее содержимое:

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

Изменения в функции

С версии 2.1.0 функция была введена. С версии 5.3.0 изменено поведение: вывод "Disallow: /" будет убран, если видимость сайта для поисковых систем ограничена с помощью мета-тега robots в HTML через колбек wp_robots_no_robots().

Код функции do_robots

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

    /**
     * Срабатывает при отображении файла robots.txt.
     *
     * @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.phpn";

    /**
     * Фильтрует вывод robots.txt.
     *
     * @since 3.0.0
     *
     * @param string $output Вывод robots.txt.
     * @param bool   $public Является ли сайт "публичным".
     */
    echo apply_filters( 'robots_txt', $output, $public );
}

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

  • _doing_it_wrong()
  • cache_javascript_headers()
  • download_url()
  • get_privacy_policy_url()
  • maybe_convert_table_to_utf8mb4()
  • nocache_headers()
  • show_admin_bar()
  • wp_check_browser_version()
  • wp_die()
  • wp_editor()
  • wp_get_raw_referer()
  • wp_get_referer()
  • wp_install_defaults()
  • wp_magic_quotes()
  • wp_mail()
  • wp_oembed_get()
  • wp_redirect()
  • wp_safe_redirect()
  • wp_star_rating()
  • wp_timezone_choice()
  • wp_validate_redirect()

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *