Фанатам «Секретных материалов» посвящается, или Как исключить страницу из навигации

25 комментариев

Здравствуйте, дорогие друзья и гости моего блога! Рассказывая в прошлом посте о создании страниц на блоге, я упомянула о том, что по умолчанию все вновь созданные страницы автоматически помещаются в главное меню блога.

Недавно я для себя вывела некое правило, которое применимо не только к ведению блога, но и вообще к жизни в целом. Звучит оно примерно так: «Чем автоматизированнее процесс, тем более пристального внимания к себе он требует». А попросту говоря: если где-то что-то делается само, то все равно потом придется результат дорабатывать под себя.

К чему это я? Да к тому, что оно-то удобно, когда страницы помещаются в меню автоматом, но иногда как раз нужно этого избежать, и новые страницы не показывать ни в меню, ни в карте блога.

Например, у вас на блоге есть страница со ссылками на скачивание, которые вы раздаете за подписку. Разумеется, ее нужно спрятать со всеобщего обозрения. Или вы благодарите человека, оставившего первый комментарий у вас на блоге, перенаправив его на страницу с россыпью спасибок, воздушных шариков, зайцами в реверансе и т.д. Естественно, такую страницу в меню выводить незачем.

В общем, причин скрывать страницы из навигации и удалить их из меню и карты блога может быть много, а решение для всех случаев одно. Точнее, два.Я расскажу вам о том, как удалить страницы из меню при помощи плагина Exclude Pages и без использования оного. А затем мы посмотрим, как же удалить ссылку на страницу из карты блога.

Как удалить страницы из меню при помощи плагина Exclude Pages

Плагин — это всегда самое удобное решение (для блогера, но не для сервера, где блог «живет»), поэтому удалять страницы из навигации при помощи Exclude Pages — сплошное удовольствие:

  1. Скачиваем плагин
  2. Разархивируем его в папку с плагинами вашего блога: \wp-content\plugins
  3. Активируем в админке
  4. Исключаем и включаем страницы в меню блога, снимая и ставя галочку в поле, которое добавляет Exclude Pages на страницу редактирования страницы (упс, тавтология вышла 🙁 ):

На этом с этим плагином все. Никаких настроек у него нет, а для удаления страницы из меню просто отжимаете галочку и сохраняетесь/обновляетесь. Но мы же бережем свой блог, заботимся о скорости его загрузки, не так ли?

Если логически подумать, то зачем нужен плагин, если мы с вами создаем статические страницы крайне редко, и на каждом блоге их можно по пальцам пересчитать (я сейчас говорю о классических блогах. С сайтами, созданными на основе WordPress в основном из статических страниц, ситуация другая — им такой плагин может быть нужен как воздух)? Поэтому самое время озадачиться вопросом,

Как удалить страницы меню без плагина

Здесь у нас последовательность манипуляций будет немного сложнее, но если вы все повторите за мной в точности, то проблем не возникнет. Web-Кошка гарантирует, как говорится 🙂 …

Главное меню блога формирует и выводит функция wp_list_pages (). Ей можно указать, какие страницы пропустить при создании меню, или наоборот, назвать список страниц, строго из которых мы хотим меню сформировать. За исключение отвечает параметр exclude=ID, за включение — include=ID.

Что такое ID? Это номер вашей страницы, который присваивает ей база данных для удобной обработки информации. У каждой страницы, записи, рубрики есть свой уникальный ID. Значит, чтобы исключить какие-то страницы из меню, мы должны знать их ID, чтобы указать их в функции.

Итак, чтобы удалить страницу из меню блога без плагина, нужно:

  1. Узнать ID нужных страниц. Как это сделать?
    В режиме редактирования интересующей вас страницы посмотрите на адресную строку браузера. Там вы увидите что-то вроде http://drupalomania/wp-admin/post.php?post=39&action=edit#. Так вот post=ID. То есть ID моей страницы — 39. Так пройдитесь по всем ненужным в меню страницам и запомните (а лучше запишите) все ID.
  2. Теперь нужно найти функцию wp_list_pages () в файлах вашей темы оформления. Обычно она кроется в functions.php, но может находиться и в header.php, и в footer.php. Чтобы не гадать, воспользуемся поиском по тексту файлов, встроенному в Total Commander. Перейдем в папку установленной темы оформления (1). Откроем окно поиска (2). Отметим галочкой «С текстом» (3). Скопируем название функции без скобок на конце (4) и запустим поиск (5). В нижней части окна мы получим список всех файлов, где прописана эта функция (6).
  3. Если файлов несколько (как у меня), то обычно нам нужен файл functions.php. Хотя если его нет в списке, то можно позкспериментировать, изменяя функцию в разных файлах и смотря на результат. Главное, использовать Notepad++ и не забывать откатывать ошибочные действия, используя сочетание клавиш CTRL+Z при ошибке или поломке блога.
  4. Узнать, какой именно файл нужен, можно по комментариям, которыми нормальные разработчики тем всегда обильно снабжают все файлы. Так, у меня в functions.php такой код:
    // Generates the menu
    function greenpark_globalnav() {
        if ( $menu = str_replace( array( "\r", "\n", "\t" ), '', wp_list_pages('title_li=&echo=0&depth=1' ) ) )
        echo apply_filters( 'globalnav_menu', $menu );

    Фраза «Generates the menu» явно говорит о том, что следующая функция создает меню.

  5. Теперь внимание! Если у вас в функции уже в скобках прописаны какие-то параметры, как у меня:
    wp_list_pages('title_li=&echo=0&depth=1' )

    то вставлять параметр для исключения страниц нужно так:

    wp_list_pages('exclude=36&title_li=&echo=0&depth=1' )

    Заметьте: exclude=36 вставляется под кавычки и отделяется от других параметров этой функции разделителем &.
    Если же у вас в теме у wp_list_pages () нет параметров, тогда вы просто вставляете в скобки без кавычек exclude=ID.
    Если вам нужно исключить несколько страниц, то просто перечислите все ID через запятую. То есть wp_list_pages (exclude=36,39,42) исключит из меню страницы с этими ID.
    Аналогично, если вы хотите сформировать главное меню блога только из определенных страниц, то достаточно exclude заменить на include и точно так же перечислить ID нужных страниц.

  6. Сохраняйтесь и проверяйте: выбранные страницы из меню должны исчезнуть.

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

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

Проверить поддержку темой настраиваемых меню можно на вкладке «Меню» пункта «Внешний вид» в админке.

UPD: Оказывается, от моего внимания ускользнул самый очевидный и лежащий на поверхности способ скрытия страниц из меню: достаточно просто изменить ее видимость с «Публичное» на «Личное». Делается это на странице редактирования страницы (и вновь прошу прощения за повтор). Находите справа от поля редактора строчку «Видимость» и кликаете по «Редактировать»:

Поле «Видимость» развернется, и вы сможете изменить статус статьи с публичной, то есть видимой всем, на личную, то есть видимую только вам: Соответственно, из меню такая страница исчезнет. За этот способ отдельное спасибо Александру, который предложил и протестировал его!

Предположим, тем или иным способом мы страницы из меню удалили.

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

Пригласить-то пригласила, а статья на эту тему еще не опубликована, так что заклинаю вас: подписывайтесь на обновления блога, дабы не пропустить момент, когда она (а также другие не менее интересные статьи) наконец-то появится на блоге Web-Кошки! А на сегодня все, и я с сожалением прощаюсь с вами, дорогие друзья!

25 коммент.
  1. Я точно не помню, конечно, но если делать типа ‘премиальных’ страниц (о чем ты говорила: для первых подписчиков, для бонусного скачивания и т.д.) разве не подойдет то, что можно сделать страницу ‘личной’ или по паролю? Если подойдет, и страница не будет в меню, то так проще гораздо.

    «Чем автоматизированнее процесс, тем более пристального внимания к себе он требует» — это точно подмечено 🙂

    • Web-Кошка

      Сейчас экспериментировала с паролями и личным. Итог таков, что ни под паролем, ни личные записи не пропадают из меню. Хотя, возможно, это потому, что оба меню у меня — настраиваемые, и страницы там жестко прописаны.
      Но знаешь, думаю, если все было бы так просто, то никто бы не заморачивался с плагинами. В общем, нужно, конечно, попробовать на теме с обычным меню, но думаю, что это не сработает…

    • Web-Кошка

      Никак не пойму — у меня шрифт мелкий или все-таки читаемый нормально?

  2. ‘Итог таков, что ни под паролем, ни личные записи не пропадают из меню» а ты кэш чистила после изменений?
    Я просто помню, когда-то давно скрывал страницы из меню таким способом. Но там может тема была заточена под это, или у меня свое меня было, а не дефолтное. Точно не вспомню. Попробую завтра у себя на блоге поэкспериментировать.

    А насчет шрифта, я сечас с планшета, но вроде нормальный шрифт 🙂 днем с компа заходил, тоже все в порядке. А вот позавчера вроде, у тебя, как мне показалось заголовки записей были черезчур огромными. С CSS экспериментировала? Или это у меня в браузере был масштаб увеличен? =)

    • Web-Кошка

      Точно, эксперимент не засчитан — кеш-то я не почистила. Отсюда уже другой итог: пора идти спать, а то что-то уже не соображаю ничего.
      И смайлики в комменты тоже уже пора поставить…
      Да, ковыряюсь потихоньку в стилях, но что-то никак с собой не договорюсь, на чем остановиться. Похоже, это бесконечный процесс…

  3. Меня=меню =))) очепятался

  4. Ну вот, сейчас у себя проверил. Параметр «Личное» вполне себе работает, и страница открыто не публикуется. Так что, можно этот способ тоже добавить в статью. Тем более, он самый простой.

    • Web-Кошка

      Спасибо, Александр! Добавила!

      • А разве на страницу под редакцией «личное» может зайти читатель по ссылке? У меня плагин для карты блога такой, что статьи можно вообще не вносить на страницу, а меню на сайте сделать самостоятельно, где тоже нужные страницы спрятать, точнее в меню не вносить. Вообщем, без каких-то плагинов можно спрятать кучу страниц, а по ссылке на них можно будет зайти…. %)

        • Конечно может. Она просто нигде явно не публикуется (т.е. ссылка на нее). Но она ведь существует.

    • Когда я искала вариант скрытия страницы из меню, тоже остановилась на этом варианте (свойства -> личное). Он реально самый простой, я тогда не понимала, зачем усложнять жизнь плагинами, редактированием файлов темы и т д. Но когда я его протестировала(этот способ), моему разочарованию не было предела — при выходе из своей учетной записи и переходе по ссылке на эту страницу — ошибка 404. Так что решила проблему добавлением параметра exclude= в файле функции, спасибо, Лариса за подробную инструкцию!)))

  5. vik

    здравствуйте!у Вас получилось в статье:»…нормальные герои всегда идут в обход…»столько лишних движений описали.хотя…статья интересная.есть что почерпнуть

    • Здравствуйте! А, что, на Ваш взгляд, лишнее? Возможно, Ваше дополнение будет очень полезно 🙂 .

  6. Oleg

    А в joomla 2.5 эту проблему можно решить?

    • Олег, в Joomla такой проблемы вообще нет — Вы сами формируете нужные пункты меню и размещаете их в нужном месте (модуле). Поэтому и исключать ненужные страницы нет необходимости.

      • Oleg

        Проблема в том, что не нужны пункты меню, а нужна просто ссылка на страницу.

  7. Леонид

    Здравствуйте. Спасибо за статьи. очень нужные и познавательные. Скажите, а есть что то такое же удобное для удаления из рубрик из меню?

    • Леонид, спасибо за оценку, приятно слышать 🙂 Есть похожий способ без плагина, он хорошо описан вот здесь — http://wp-money.ru/plaginy-wordpress/dopolnitelnye-vozmozhnosti/kak-skryt-rubriku-v-wordpress-bystryj-sposob-bez-plagina-rabotaet-100/

      • Леонид

        Спасибо, за почти онлайн :). Хотелось бы без поисков в файлах, удаления чего-то и т.д. что бы среднестатистически пользователь это мог сделать. Методом тыка нашлось решение. Рубрике которую не хочется светить устанавливается родительская категория «без рубрики» Категория есть, адрес есть, в меню нет. Может кому пригодится.

        • Кстати да, хорошее решение, и лежит вроде бы на поверхности, но первый раз встречаю, так что спасибо, наверняка пригодится кому-нибудь 🙂

  8. Леонид

    Извиняюсь. Рубрик из меню.

  9. Андрей

    Спасибо за информацию о нужном плагине, ведь у меня именно тот случай, о котором Вы пишите в начале статьи, — сайт на основе вордпресс с плагином, добавляющим социальные функции. И вот, помимо исключения страниц из меню, мне ещё хотелось бы скрыть некоторые от незарегестрированных пользователей. Не знаете, как ещё и это осуществить? По прочтении создалось впечатление, что для этого нужно что-то прописать там же, но…)))
    Спасибо.

  10. Роман

    Спасибо очень помогли.

  11. Как раз искал информации как исключить страницу из навигации

Добавить комментарий

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