Два публичных статуса в WordPress

// Март 10th, 2015 // CMS, PHP, WordPress

status-iconВ этом посте я расскажу, как сделать так, чтобы у вас в WordPress было бы два публичных статуса. Публичный статус присваивается постам (или другим объектам сайта), которые доступны пользователям без дополнительных условия (ввод пароля и т.д.).

Задача

Когда на сайте есть объекты, которые часто включаются-выключаются — то это не нравится поисковикам. Например, есть у нас объекты, которые размещаются на один месяц, а потом убираются, а потом снова могут быть размещены. Это вызывает т.н. эффект мигания. Поисковики такие страницы очень не любят. Поэтому необходимо сделать так, чтобы у таких объектов скрывались контакты, но сами они были доступны. Необходимо сделать в WordPress второй публичный статус (аналог статуса Public) для объекта сайта (custom post type), и реализовать логику отображения по этому статусу. При этом данные объекты должны скрываться из поиска, но быть доступными по прямой ссылке.

Решение

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

1. Ставим плагин EditFlow. Нас интересует его модуль Custom Statuses. Его особенность в том, что статусы можно привязывать не только к обычным постам, но и к кастомным объектам сайта (custom_post_type).

customstatus07_h660

 

2. Идём в настройки модуля плагина, удаляем статусы, которые он нам понаделал и добавляем новый.

3. По-умолчанию все статусы модуля не публичные. Чтобы наш статус стал публичным — делаем небольшое изменение в модуле (не люблю я это дело, но приходится).
в строку 245 файла /wp-content/plugins/eit-flow/modules/custom-status/custom-status.php

  
  , 'public'	    => true
  , 'exclude_from_search' => true

4. Теперь в том месте, где у нас идёт запрос списка постов добавляем фильтр по статусу в него (т.е. чтобы в списке отображались только посты со статусом pubish).

   
global $wp_query;
   $args = array_merge( $wp_query->query_vars, array( 'post_status' => 'publish' ) );
   query_posts( $args );

5. А вот пример работы логики вида (используется плагин Pods Framework).

$object = pods( 'custom_object_type', $id );
<?php if($object->display( 'custom_object_type' ) == 'skryitaya'): ?>
Some content
<?php endif; ?>

Собственно результат достигнут.

Share

Спасибо!


Если вам помогла статья, или вы хотите поддержать мои исследования и блог - вот лучший способ сделать это:


Комментировать