Как удалить ненужные страницы, такие как архивы, поиск и другие?

15 апр. 2013 г., 20:02:31
Просмотры: 35.1K
Голосов: 9

По умолчанию WordPress создает целый набор страниц, которые мне не нужны - архивы, страницы авторов, блог, месячные архивы, последние записи, категории, комментарии, вложения, таксономии, поиск, результаты поиска и, вероятно, еще несколько других, которые я упустил.

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

0
Все ответы на вопрос 5
0

Вы можете перенаправить любой запрос, который не является страницей или админкой, на главную страницу, используя действие 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' );

Если это не админка или запрос страницы, произойдет перенаправление. Все типы страниц, которые будут исключены, можно посмотреть в разделе Условные теги в Кодексе.

8 мая 2013 г. 17:30:12
0

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

Настройки отключения архивов в WordPress SEO

15 апр. 2013 г. 20:18:48
0

Вы можете использовать другой небольшой скрипт, не добавляя никаких плагинов. Есть пост здесь, а код, который нужно добавить в index.php вашей темы, выглядит так:

if(is_archive()) {
    // принудительно вызываем 404 ошибку
    $wp_query->set_404();
    status_header( 404 );
    nocache_headers();
    include("404.php");
    die;
}

Надеюсь, это окажется полезным.

8 сент. 2015 г. 14:34:19
2

Для тех, кому интересно, я в итоге использовал 301 редиректы через .htaccess.

# Редирект ненужных страниц
Options +FollowSymlinks
RewriteEngine on
RedirectMatch 301 ^/portfolio/.*$ /gallery/
RedirectMatch 301 ^/author/.*$ /
RedirectMatch 301 ^/category/.*$ /
RedirectMatch 301 ^/tag/.*$ /
RedirectMatch 301 ^/20.*$ /

Архив блога ^/20.*$ не идеален, но пока сойдёт. Также не знаю, какие ещё страницы я мог упустить.

8 мая 2013 г. 15:34:33
Комментарии

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

Alexis Wilke Alexis Wilke
7 мар. 2018 г. 19:33:29

Что касается последнего, вы могли бы хотя бы проверить, что есть 4 цифры, как в: ^/20[0-9][0-9]. Теперь у вас должен быть диапазон от 2000 до 2099.

Alexis Wilke Alexis Wilke
7 мар. 2018 г. 19:35:25
0

Это также можно реализовать с помощью хука 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);
  }
}
27 нояб. 2018 г. 11:43:11