» » » Редактор для категорий, меток и произвольных таксономий
logotip

Редактор для категорий, меток и произвольных таксономий

Всем привет! Сегодня на seo-mayak.com мы продолжим расширять возможности WordpPress и создадим полноценный текстовый редактор для категорий (рубрик), меток и произвольных таксономий.

Возникает резонный вопрос, а зачем он вообще там нужен?

Многим он действительно никчему, но WordPress набирает все большую популярность и на данной CMS создают сайты самых разных тематик.

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

redaktor-dlia-kategorii

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

В общем пришлось мне изрядно поломать голову и о том, что у меня в итоге получилось я и собираюсь Вам рассказать. Поехали!

Как добавить редактор в категории и метки без плагина

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

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

Среди таких есть хуки: edit_category_form_fields, позволяющий добавлять дополнительные поля в раздел редактирования категорий и edit_tag_form_fields, отвечающий за новые поля в разделе редактирования меток.

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

Данную функцию надо вставлять в файл functions.php вашей темы.

function mayak_category_description($container = ''){
	$content = is_object($container) && isset($container->description) ? html_entity_decode($container->description) : '';
	$editor_id = 'tag_description';
	$settings = 'description';		
	?>
    <tr class="form-field">
	<th scope="row" valign="top"><label for="description">Описание</label></th>
	<td><?php wp_editor($content, $editor_id, array(
				'textarea_name' => $settings,
				'editor_css' => '<style>.html-active .wp-editor-area{border:0;}</style>',
	)); ?><br />
	<span class="description">Описание по умолчанию не отображается, однако некоторые темы могут его показывать.</span></td>
    </tr>
    <?php	
}
add_filter('edit_category_form_fields', 'mayak_category_description');
add_filter('edit_tag_form_fields', 'mayak_category_description');

Кстати, сам редактор выводится с помощью функции WordPress wp_editor(), работу которой я уже подробно разбирал в одной из своих прошлых статей. Кто не читал, советую ознакомиться.

Посмотрим, что получилось:

redaktor-dlia-kategorii-1

Как видно теперь у нас два поля описания категорий и одно из них явно лишнее, думаю понятно какое.

Для решения этой проблемы, пришлось написать еще одну простенькую функцию, вот она:

function mayak_remove_category_description(){
    global $mk_description;
    if ( $mk_description->id == 'edit-category' or 'edit-tag' ){
    ?>
        <script type="text/javascript">
        jQuery(function($) {
            $('textarea#description').closest('tr.form-field').remove();
        });
        </script>
    <?php
    }
}
add_action('admin_head', 'mayak_remove_category_description');

Смотрим

redaktor-dlia-kategorii-2-1

Если старое поле исчезло, значит все в порядке.

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

Все работает на ура!

Но это еще не все! Теперь надо как-то вывести текст с редактора на страницах категорий или меток, ведь по умолчанию там выводятся только анонсы записей.

Для вывода содержимого поля «Описание» предусмотрены специальные функции WordPress:

category_description()> — выведет описание рубрики;
tag_description() — выведет описание метки.

В файлах их нужно прописывать с оператором echo, т.е. так:

<?php echo category_description(); ?>
<?php echo tag_description(); ?>

Данные функции могут работать, как внутри цикла WordPress, так и за его пределами, это к слову, но лучше описание выводить за приделами цикла, т.е. перед строчкой:

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

Или после строчки:

<?php endwhile; ?>

Конечно, могут быть и другие варианты цикла, все зависит от шаблона.

И это еще не все! Остался один маленький штрих.

Дело в том, что на странице списка рубрик или меток по умолчанию отображаются их описание и если описание будет слишком большое, то получится следующее:

redaktor-dlia-kategorii-4-1

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

В правом верхнем углу страницы есть вкладка «Настройки экрана», вот она то нам и нужна:

redaktor-dlia-kategorii-4

Снимаем галочку и описание больше не будет мозолить глаза. Все просто!

Предвижу вопрос по поводу формирования description для категорий. Здесь сложностей быть не должно. Тот же плагин All in One SEO Pack автоматом выводит в качестве description определенное количество символов из первых предложений описания, лишнее просто обрезается.

В следующих статьях будет не менее интересно, следите за обновлениями.

До встречи!

С уважением, Виталий Кириллов

Статьи по теме:
Шаблоны для категорий или как сделать каталог из рубрики
Категории WordPress — термы и таксономии

Комментарии: 4

  1. Наталья:

    Классная возможность! Я думаю, многим пригодится. Я помню, как раньше мучилась, вставляя теги в поле описания категорий.
    Только я с недавних пор просто убрала это описание, т.к. оно было скорее для поисковиков, пользователи его не читали)) Может, теперь подумаю и верну его))

    Ответить
    • Виталий Кириллов:

      Здравствуйте Наталья!
      Многие вставляют теги в описание и я это делал до недавних пор)

      Ответить
  2. Альберт:

    Вот спасибо, Виталий! А я мучился с html-кодом, правда нельзя было вставить тег -more-. На днях попробую и отпишусь о результатах.

    Ответить
    • Виталий Кириллов:

      Здравствуйте Альберт!
      Тег more предусмотрен только для записей post, в категориях он работать не будет.

      Ответить

Оставить комментарий

Внимание комментатор! Прежде чем вставить: HTML, JavaScript или PHP код в свой комментарий, преобразуй его в html сущность!

Subscribe without commenting

» Подписаться на комментарии по RSS