Excludeposts — плагин WP для скрытия постов с «главной» и из RSS по рубрикам, меткам и индивидуально. Скрываем отдельную запись в WordPress отовсюду: из анонса, категории, локального поиска, RSS

Задача скрытия постов с «главной» и из RSS в блогах на WordPress уже многократно решена. Но я не знаю ни одного решения, которое бы обладало функционалом плагина сайт Excludeposts , а именно:

  • позволяло бы скрывать посты не только в зависимости от привязки к рубрике, но и при задании специальной метки записи ;
  • а также позволяло бы скрыть единичные посты просто при установке специальной опции;
  • чтобы скрытие постов настраивалось удобным образом , т.е. на страницах редактирования рубрик, меток и постов.

Я сам — человек весьма скрытный, потому, естественно, плагин Excludeposts буду использовать на всех сайтах, где по разным причинам потребуется скрывать какие-то посты с «главной» и из RSS.

Не буду загружать статью перечислением этих причин. Если у вас своих причин нет, про мои можете .

А это значит, что плагин будет поддерживаться в актуальном 100% рабочем состоянии, даже если разработчики WP что-то очень изменят в своём движке. К слову, работоспособность плагина не гарантируется на WP древнее версии 3.1 . Потому что я использовал современные технологии.

Внимание, смертельный номер! Сейчас я активирую плагин на этом блоге и продемонстрирую его работоспособность.

Стандартная и знакомая многим процедура. Добавляю новый плагин путём его загрузки со своего компьютера. Для этого выбираю архив сайт-excludeposts.zip , после получения сообщения об удачной установке не забываю активировать плагин .

Теперь админка моего блога изменилась до неузнаваемости. Конкретно, в редакторе рубрик при выборе любой рубрики можно лицезреть новую опцию: Исключить посты . Она имеет 4 значения:

  • Не исключать
  • Только из RSS
  • Только с «главной»
  • С «главной» и RSS

Там же есть небольшая подсказка. Под «главной» подразумевается ваша основная лента постов, которая обычно выводится на главной странице блога. А под RSS подразумевается основная RSS-лента постов, которая обычно доступна по адресу /feed или /?feed=rss . Кроме неё есть свои ленты у каждой рубрики, метки, и даже своя лента комментариев у каждого поста — из них плагин ничего не исключает.

Кстати, новое меню «Исключить посты» добавилось также и в редактор меток . Принцип действия прост и понятен: выбираете, откуда исключать посты данной рубрики или метки, нажимаете «Обновить». Теперь посмотрим список рубрик:

Здесь появился новый столбец «Exclude?» , в котором отображается информация для каждой рубрики, исключены ли её посты с «главной» и RSS. Вы можете нажать на заголовок любой рубрики, добавить для неё правило исключения постов или отменить исключение выбором пункта «Не исключать». То же самое относится и к меткам:

Изменения произошли и в редакторе постов. В правой колонке в самом низу появился виджет, позволяющий выборочно исключить любую запись с «главной», RSS или из обоих этих лент. Вы можете виджет перетащить в любое удобное вам место (даже в левую колонку). А можете отключить. Для этого в самом верху страницы есть «Настройки экрана» — снимите галочку «сайт Excludeposts» . Так вы просто уберёте с экрана виджет, но посты по-прежнему будут исключаться.

Скачать плагин Excludeposts

Важные замечания!

Если вы уже пользуетесь другим плагином или кодом исключения, то при активации плагина Excludeposts ваши скрытые посты могут на какое-то время попасть в RSS и на главную, пока вы не настроите плагин Excludeposts. Для предотвращения такого поведения найдите в файле плагина строчку:

Add_filter("pre_get_posts", "excludeposts__main");

И модифицируйте её следующим образом:

Add_filter("pre_get_posts", "excludeposts__main", 1);

Т.е. теперь функция плагина Excludeposts сработает раньше функции вашего плагина и не уничтожит результат его работы. Затем настройте плагин Excludeposts и установите ему самое позднее срабатывание:

Add_filter("pre_get_posts", "excludeposts__main", 99999);

Информация для чистюль. После деинсталляции плагина Excludeposts все посты будут отображаться как обычно, а в базе данных останется немножко «мусора»: это 2 записи в таблице «options», которые начинаются на «сайт_excludeposts__». И записи в таблице «postmeta»: «_сайт_excludeposts__single» (искать в поле meta_key) — их будет ровно столько, сколько постов вы исключили индивидуально в редакторе постов.

А вот и код плагина:

taxonomy; $o = get_option($option_name); if (isset($o[$t->term_id])) $o = $o[$t->term_id]; else $o = 0; ?> ID, "_сайт_excludeposts__single", true); ?>

Вы можете исключить попадание этого поста на "главную" (т.е. пост будет исключён из общей ленты постов), в RSS (имеется ввиду основная общая RSS) или оба варианта (последний пункт в списке).

Изменения сохранятся при публикации, обновлении или сохранении записи!

taxonomy; $option = get_option($option_name); $options_texts = array("-", "RSS", "Главная", "RSS & Главная"); if (! isset($option[$id])) $option[$id] = 0; if (! isset($options_texts[$option[$id]])) return "?"; else return $options_texts[$option[$id]]; } /* Список вариантов исключения */ function excludeposts__select($o) { ?> is_home) $n_ex = array(2, 3); #thesenum; else if ($query->is_feed and ! $query->is_single and ! $query->is_archive) $n_ex = array(1, 3); #thesenum; if ($n_ex) { $ex = excludeposts__get_ex_array("category", $n_ex); if ($ex) $query->set("category__not_in", $ex); $ex = excludeposts__get_ex_array("post_tag", $n_ex); if ($ex) $query->set("tag__not_in", $ex); $ex = excludeposts__get_ex_array("post", $n_ex); if ($ex) $query->set("post__not_in", $ex); } return $query; } /* Ф-я возвращает массив номеров исключённых объектов. $taxonomy - суффикс опции WP, $n_ex - массив исключаемых значений: см. #thesenum */ function excludeposts__get_ex_array ($taxonomy, $n_ex) { if ("post" == $taxonomy) { global $wpdb; return $wpdb->get_col("SELECT `post_id` FROM $wpdb->postmeta " .. "AND `meta_value` IN (" . join(",", $n_ex) . ")"); } if (! $option = get_option("сайт_excludeposts__$taxonomy")) return false; $ex = array(); foreach($option as $k=>$v) if (in_array($v, $n_ex)) $ex = $k; return $ex; } ?>

Flector 4.0

Обновлено:

Больше не работает!

Плагин для скрытия части поста или ссылок от незарегистрированного посетителя блога. В большинстве случаев данная функциональность используется варезными сайтами для скрытия ссылок на скачивание файлов. Зачем это делается мне не совсем понятно, но раз людям нужны насильно зарегистрированные пользователи на сайте, то почему бы и нет? Для WordPress существует всего несколько плагинов подобного типа и наиболее функциональный из всех. Только вот, к сожалению, и он имеет недостатки, хотя в целом использовать его по назначению можно.

1 Распаковываем архив.

2 Копируем папку в /wp-content/plugins/ .

3 Заходим в админку блога на вкладку "Плагины " и активируем плагин.

Плагин активирован, но пока что не работает. Переходим в "Настройки\HidePost ". Для включения плагина ставим галку на

Крайне не советую пользоваться функцией "Protect Link " (автоматическое скрытие ссылок в вашей записи). Даже в самой простой записи (проверял на этом блоге) есть достаточное количество ссылок, чтобы автоматическая замена их на текст "вы должны зарегистрироваться для просмотра" превращала текст записи в полную мешанину, которую невозможно читать. Плюс оформить текст замены нет никакой нормальной возможности, так как ссылка может быть в начале записи, в середине абзаца, между скобок и тд и тп.

То есть выделять этот текст красиво оформленным через css блоком нельзя - напрочь "посыплется" оформление текста записи. Ну и конечно самая важная вещь, из-за которой автоматическим скрытием ссылок пользоваться невозможно - нет никакого способа запретить плагину не скрывать определенную ссылку. Получилось так, что у меня при показе маленькой фотки ссылка на большую фотку (на этом же сайте) оказалась скрыта плагином. Проще уж скрыть всю часть статьи после вводного абзаца, чем разукрашивать пост десятком надписей "вы должны зарегистрироваться для просмотра".

Еще одним неприятным моментом плагин отличился, когда я попытался скрыть текст ото всех, кроме определенной группы пользователей. А в частности я попытался организовать скрытие текста ото всех групп пользователей, кроме администраторов. У меня ничего с этим не вышло, такое впечатление, что плагин игнорирует указанный в теге уровень доступа.

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

Так как ни автоматическим скрытием ссылок, ни опцией скрытия от определенных групп пользователей мы пользоваться не будем, то и настраиваем только одно текстовое поле "Protect content show text: " (показываемый текст на месте скрытой части записи).

Сразу предупрежу, данная настройка не годится, если вы планируете прятать часть предложения в абзаце, например. Так как я предлагаю вариант блочного оформления текста замены, а это значит что все строки или абзацы будут разорваны. Так что при написании поста сразу учитывайте, какая его часть пойдет под скрытие и соответствующим образом ее оформляйте (примеры: вводный абзац , остальное скрыто; полный текст статьи, последний абзац с ссылками скрыт).

Вставляем в "Protect content show text: " примерно следующую фразу:

Для просмотра скрытой части статьи или ссылок вы должны %login% или %register% на сайте.

Оформляем блок с помощью css (файл style.css вашей темы):

{ background : #FFFBCC ; margin : 5px 0px 10px 0px ; padding : 5px 5px 5px 5px ; border : 1px solid #E6DB55 ; } p{ font-family : Verdana, Serif; text-align : justify ; margin : 0px 0px 0px 0px ; padding : 0px 0px 0px 0px ; }

Hidepost { background: #FFFBCC; margin: 5px 0px 10px 0px; padding: 5px 5px 5px 5px; border: 1px solid #E6DB55; } .hidepost p{ font-family: Verdana, Serif; text-align: justify; margin: 0px 0px 0px 0px; padding: 0px 0px 0px 0px; }

Осталась самая малость. Эти самые %login% и %register% дают ссылку на авторизацию и регистрацию, но вот анкоры для них плагин ставит сам, поэтому их надо перевести на русский язык. Открываем файл и редактируем его на предмет перевода английских слов:

14 15 16 17 $the_text = str_replace ("%login%" , """>авторизироваться" , $the_text ) ; $the_text = str_replace ("%register%" , ""/wp-login.php?action=register" . "">зарегистрироваться" , $the_text ) ;

$the_text = str_replace("%login%","авторизироваться",$the_text); $the_text = str_replace("%register%","зарегистрироваться",$the_text);

сайт 22.04.2017

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

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

У вас может возникнуть вопрос, как же интернет поисковики узнают о новой статье, если на сайте она нигде видна не будет. Многие вебмастера создаюти используют карту сайта, ссылку на которую прописывают в файле robot.txt и\или добавляют в сервисы для вебмастеров, которые предлагают сами поисковые системы. В карте сайта ссылка на «скрытую» статью будет прописана, благодаря чему поисковые системы проиндексируют материал.

Штатно WordPress не позволяет это сделать – статью можно либо скрыть полностью с сайта (она не будет доступна никому), либо разрешить её просмотр только после ввода пароля.

Однако при использовании кода, который вписывается в файл functions.php используемой вами темы, вполне можно реализовать вышеописанный функционал.

function exc_post($query) { if ($query->is_category || ($query->is_home || ($query->is_feed))) {$query->set("post__not_in", array(381, 390));} // в скобочках id поста (записи) return $query; } add_filter("pre_get_posts","exc_post");

Впишите в файл functions.php (перед изменением не забудьте сделать резервную копию) приведённый код. В приведённом примере скрываются записи под номером 381 , 390 . В вашем случае, естественно, номера записей и их количество может и, скорее всего, будет другим.

Узнать номер записи, под которым идёт та или иная статья, предельно просто. Для этого необходимо в админ панель перейти в раздел Записи и либо навести курсор и подчеркнуть номер в отобразившейся ссылке-подсказке, либо открыть статью на редактирование и увидеть номер в адресной строке.

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

Удивительно, но в официальном репозитории плагинов WordPress жуткий дефицит решений, реализующий данный функционал. Из достойных я могу, пожалуй, лишь отметить плагин WP Hide Post .

Ну вот, собственно, и всё, что я хотел вам поведать в данном материале. Если у вас вопросы, немедля излагайте их в комментариях к материалу! :-)

Пожертвование сайту сайт (cбор пожертвований осуществляется через сервис Яндекс Деньги)