Как отключить все архивы на сайте кроме «Рубрик» и «Меток»?
Я уже писал о том, как запретить движку генерировать архивы по авторам. Однако, проблема не только в них, так как WordPress по умолчанию генерирует и другие архивы, которые доступны при открытии прямой ссылки. И в отличие от архивов авторов запретить через robots.txt индексацию архивов по месяцам может быть затруднительно (так как люди часто используют в ярлыках записей указание года). Поэтому лучше всего сразу закрыть абсолютно все архивы кроме рубрик и меток. Для этого вам необходимо добавить в файл functions.php вашей темы следующий код:
//отключение всех архивов кроме рубрик и меток start function wph_disable_all_archives($false) { if (is_archive() and !is_category() and !is_tag()) { global $wp_query; $wp_query->set_404(); status_header( 404 ); nocache_headers(); return true; } return $false; } //удаление ссылки на архив автора function wph_remove_author_link($content) {return home_url();} add_action('pre_handle_404', 'wph_disable_all_archives'); add_filter('author_link', 'wph_remove_author_link'); //отключение всех архивов кроме рубрик и меток end |
Будьте внимательны, так как этот код запретит все архивы кроме рубрик и меток (будут запрещены архивы по авторам, архивы по дате, архивы произвольных типов записей и архивы произвольных таксономий). Чтобы в индекс поисковиков не попадали страницы с ошибкой 404 вам надо использовать дополнительный код:
//запрет индексирования страниц с ошибкой 404 start function wph_noindex_for_404() { if( is_404() ) { echo '<meta name="robots" content="noindex, follow" />'.PHP_EOL; } } add_action('wp_head', 'wph_noindex_for_404'); //запрет индексирования страниц с ошибкой 404 end |
Конечно, наилучшим (и куда более простым) вариантом будет воспользоваться каким-нибудь SEO-плагином, но SEO-плагины не отключают генерацию архивов, а только запрещают их индексацию.
Код очень хороший! Но очень жаль, что конфликтует с форумом bbpress, пришлось отключить.