Как правильно убрать завершающий слеш и изменить атрибуты у мета тега robots в WordPress?

Рейтинг: 0Ответов: 1Опубликовано: 20.01.2023

При проверке валидатором W3C получаю info-предупреждение о том, что мета тег robots имеет завершающий слеш. Как с помощью functions.php триммить слеш?

<meta name='robots' content='index, follow, noodp, noydir' />

В functions.php имею такое:

/* Direktiva robots */
function wporg_wp_robots_add_follow( $robots ) {
  unset( $robots['max-image-preview'] );
  $robots['index'] = true;
  $robots['follow'] = true;
  $robots['noodp'] = true;
  $robots['noydir'] = true;
  return $robots;
}
add_filter( 'wp_robots', 'wporg_wp_robots_add_follow' );

Код удаляет max-image-preview:large в content, который WordPress стал вставлять по дефолту. И добавляет index, follow, noodp, noydir атрибуты.

Но я заметил, если через админку выставить чекбокс "Попросить поисковые системы не индексировать сайт, то я получу в HTML-коде следующее:

<meta name='robots' content='noindex, nofollow, index, follow, noodp, noydir' />

Т.е. будет и index, и noindex. Как правильно добавлять атрибуты, чтобы не было противоречий у админки и funtions.php? И при этом триммить конечный слеш.

Ответы

▲ 2

В фильтр передается массив, и надо его проанализировать:

/**
 * Robots filter.
 *
 * @param array $robots Robots.
 *
 * @return array
 */
function wporg_wp_robots_add_follow( $robots ) {
    unset( $robots['max-image-preview'] );

    if ( ! ( isset( $robots['noindex'] ) && $robots['noindex'] ) ) {
        $robots['index'] = true;
    }

    if ( ! ( isset( $robots['nofollow'] ) && $robots['nofollow'] ) ) {
        $robots['follow'] = true;
    }

    $robots['noodp']  = true;
    $robots['noydir'] = true;

    return $robots;
}

add_filter( 'wp_robots', 'wporg_wp_robots_add_follow' );

Про закрывающий слеш забудьте - не надо заниматься ерундой. Он вообще ни на что не влияет.