Как удалить ненужные страницы, такие как архивы, поиск и другие?
По умолчанию WordPress создает целый набор страниц, которые мне не нужны - архивы, страницы авторов, блог, месячные архивы, последние записи, категории, комментарии, вложения, таксономии, поиск, результаты поиска и, вероятно, еще несколько других, которые я упустил.
В большинстве случаев я создаю обычные сайты-визитки, где нужно только несколько статичных страниц. Как избавиться от всех остальных страниц? Есть ли плагин, который это сделает? Нужно ли настраивать десяток редиректов в .htaccess? Я пытался искать, но нахожу только информацию о том, как скрыть части страницы или настроить карту сайта, чтобы скрыть страницы от поисковых систем. Но мне вообще не нужны эти страницы, так что даже прямой ввод URL не должен работать.

Вы можете перенаправить любой запрос, который не является страницей или админкой, на главную страницу, используя действие parse_query
:
function wpa_parse_query( $query ){
if( ! is_admin() && ! $query->is_page() ) {
wp_redirect( home_url() );
exit;
}
}
add_action( 'parse_query', 'wpa_parse_query' );
Если это не админка или запрос страницы, произойдет перенаправление. Все типы страниц, которые будут исключены, можно посмотреть в разделе Условные теги в Кодексе.

Плагин WordPress SEO от Joost de Valk позволяет отключить большинство, если не все, архивы, о которых вы упомянули:

Вы можете использовать другой небольшой скрипт, не добавляя никаких плагинов. Есть пост здесь, а код, который нужно добавить в index.php вашей темы, выглядит так:
if(is_archive()) {
// принудительно вызываем 404 ошибку
$wp_query->set_404();
status_header( 404 );
nocache_headers();
include("404.php");
die;
}
Надеюсь, это окажется полезным.

Для тех, кому интересно, я в итоге использовал 301 редиректы через .htaccess.
# Редирект ненужных страниц
Options +FollowSymlinks
RewriteEngine on
RedirectMatch 301 ^/portfolio/.*$ /gallery/
RedirectMatch 301 ^/author/.*$ /
RedirectMatch 301 ^/category/.*$ /
RedirectMatch 301 ^/tag/.*$ /
RedirectMatch 301 ^/20.*$ /
Архив блога ^/20.*$
не идеален, но пока сойдёт. Также не знаю, какие ещё страницы я мог упустить.

Обратите внимание, что .*$
бесполезен и замедляет ваше регулярное выражение. Поэтому достаточно просто ^/portfolio/
, чтобы отловить страницу, начинающуюся с portfolio. Также интересно, не следует ли вместо этого возвращать 404.

Это также можно реализовать с помощью хука template_redirect.
Вы можете проверять каждый тип архивных страниц или "отключить" их все вместе.
- Возвращать ошибку 404 или перенаправлять на другую страницу, я предпочитаю подход с 404 ошибкой.
В functions.php
:
/* Отключение архивных страниц */
add_action('template_redirect', 'my_disable_archives_function');
function my_disable_archives_function()
{
/* Примеры условных проверок:
is_category()
is_tag()
is_date()
is_author()
is_tax()
is_search() ... */
// Возвращаем 404 для всех типов архивов, кроме архива типа my_custom_post_type.
$post_types = array('my_custom_post_type');
if ( (is_archive() && !is_post_type_archive( $post_types )) )
{
global $wp_query;
$wp_query->set_404();
status_header(404);
}
}
