WP Manifestindependent plugin directory
manifest / content / category-custom-settings

Служебный: Category Custom Settings

Adds custom settings fields for WordPress categories and provides helper functions for frontend output.

by @big_jacky · github.com/seojacky/category-custom-settings · website

0stars
0forks

Install

No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:

wp plugin install https://github.com/seojacky/category-custom-settings/archive/refs/heads/master.zip

WordPress-плагин для добавления пользовательских полей к рубрикам (category) в админке и удобного вывода этих значений на сайте.

Что делает плагин

Плагин добавляет дополнительные настройки на страницу редактирования категории в WordPress.

Поля, которые поддерживаются

Для всех категорий

  • cat_add_description — дополнительное описание под листингом

Только для родительских категорий

  • cat_version — версия игры
  • cat_video — ID YouTube-видео
  • bg_category — цвет фона категории
  • cat_rss — RSS новостей
  • cat_leftlink — ссылка слева
  • cat_rightlink — ссылка справа
  • cat_adsense1 — код Adsense
  • cat_headerbanner — HTML-код баннера в шапке

Основные особенности

  • использует современный способ хранения данных через term_meta
  • работает только с таксономией category
  • расширенные поля показывает только для родительских категорий
  • защищает сохранение через nonce
  • проверяет права пользователя
  • выполняет санитизацию данных в зависимости от типа поля
  • содержит готовые функции для получения и вывода значений на фронтенде

Установка

  1. Создайте папку плагина:
category-custom-settings
  1. Внутрь папки поместите файл:
category-custom-settings.php
  1. Загрузите папку в каталог:
/wp-content/plugins/
  1. Активируйте плагин в админке WordPress: Плагины → Category Custom Settings → Активировать

Где находятся поля в админке

После активации откройте:

Записи → Рубрики → Изменить категорию

На странице редактирования рубрики появятся дополнительные поля.


Как плагин хранит данные

Плагин сохраняет значения в term meta, то есть использует стандартный механизм WordPress:

  • get_term_meta()
  • update_term_meta()
  • delete_term_meta()

Это лучше и надёжнее, чем старый способ хранения через get_option("category_ID").


Как работает логика показа полей

Всегда показывается

  • Дополнительное описание под листингом

Показываются только для родительских категорий

Если у категории parent = 0, дополнительно показываются:

  • версия игры
  • видео
  • RSS
  • ссылки
  • Adsense
  • HTML баннер

Если категория дочерняя, эти поля скрываются.


Безопасность

Плагин использует несколько уровней защиты:

  • проверка current_user_can('manage_categories')
  • проверка nonce
  • санитизация текста через sanitize_text_field()
  • санитизация URL через esc_url_raw()
  • ограниченная очистка HTML через wp_kses_post()
  • отдельная обработка кода баннеров и рекламных блоков

Функции для использования в теме

Плагин добавляет две полезные функции.

1. Получить значение поля

ccs_get_category_field($field_name, $term_id = null);

Параметры

  • $field_name — имя поля
  • $term_id — ID категории, необязательный параметр

Если $term_id не передан, функция попытается взять текущую категорию из get_queried_object().

Возвращает

Строку со значением поля или пустую строку.

Пример

$desc = ccs_get_category_field('cat_add_description');

2. Вывести значение поля

ccs_the_category_field($field_name, $term_id = null);

Функция сразу выводит значение и сама применяет подходящее экранирование в зависимости от типа поля.

Пример

<?php ccs_the_category_field('cat_version'); ?>

Примеры использования

1. Вывести дополнительное описание на странице категории

Обычно это вставляют в category.php, archive.php или в хук темы.

<?php
if (is_category()) {
    $desc = ccs_get_category_field('cat_add_description');

    if ($desc !== '') {
        echo '<div class="category-extra-description">';
        echo wp_kses_post($desc);
        echo '</div>';
    }
}
?>

2. Вывести версию игры

<?php
$version = ccs_get_category_field('cat_version');

if ($version !== '') {
    echo '<div class="category-version">';
    echo 'Версия игры: ' . esc_html($version);
    echo '</div>';
}
?>

3. Вывести YouTube-видео по ID

Поле cat_video должно содержать только ID видео, например:

a--RlPV3ZBo

Пример вывода:

<?php
$video = ccs_get_category_field('cat_video');

if ($video !== '') {
    echo '<div class="category-video">';
    echo '<iframe width="560" height="315" src="https://www.youtube.com/embed/' . esc_attr($video) . '" frameborder="0" allowfullscreen></iframe>';
    echo '</div>';
}
?>

4. Вывести ссылку на RSS

<?php
$rss = ccs_get_category_field('cat_rss');

if ($rss !== '') {
    echo '<a href="' . esc_url($rss) . '" target="_blank" rel="noopener noreferrer">RSS новостей</a>';
}
?>

5. Вывести левую и правую ссылки

<?php
$left = ccs_get_category_field('cat_leftlink');
$right = ccs_get_category_field('cat_rightlink');

if ($left !== '' || $right !== '') {
    echo '<div class="category-links">';

    if ($left !== '') {
        echo '<a class="category-link-left" href="' . esc_url($left) . '">Ссылка слева</a>';
    }

    if ($right !== '') {
        echo '<a class="category-link-right" href="' . esc_url($right) . '">Ссылка справа</a>';
    }

    echo '</div>';
}
?>

6. Вывести HTML-баннер в шапке категории

<?php
$banner = ccs_get_category_field('cat_headerbanner');

if ($banner !== '') {
    echo '<div class="category-header-banner">';
    echo $banner;
    echo '</div>';
}
?>

Внимание: это поле предназначено для доверенного HTML-кода. Используйте его только если понимаете, какой код туда вставляете.


7. Вывести Adsense-код

<?php
$adsense = ccs_get_category_field('cat_adsense1');

if ($adsense !== '') {
    echo '<div class="category-adsense">';
    echo $adsense;
    echo '</div>';
}
?>

8. Вывести данные для конкретной категории по ID

Если нужно получить данные не для текущей страницы категории, а для конкретной рубрики:

<?php
$term_id = 123;

echo esc_html(ccs_get_category_field('cat_version', $term_id));
?>

9. Пример готового блока для category.php

<?php
if (is_category()) {
    $desc = ccs_get_category_field('cat_add_description');
    $version = ccs_get_category_field('cat_version');
    $video = ccs_get_category_field('cat_video');
    $banner = ccs_get_category_field('cat_headerbanner');

    if ($banner !== '') {
        echo '<div class="category-header-banner">' . $banner . '</div>';
    }

    if ($version !== '') {
        echo '<div class="category-version">Версия игры: ' . esc_html($version) . '</div>';
    }

    if ($video !== '') {
        echo '<div class="category-video">';
        echo '<iframe width="560" height="315" src="https://www.youtube.com/embed/' . esc_attr($video) . '" frameborder="0" allowfullscreen></iframe>';
        echo '</div>';
    }
}
?>

<?php if (have_posts()) : ?>
    <div class="category-posts">
        <?php while (have_posts()) : the_post(); ?>
            <article <?php post_class(); ?>>
                <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
            </article>
        <?php endwhile; ?>
    </div>
<?php endif; ?>

<?php
if (is_category()) {
    $desc = ccs_get_category_field('cat_add_description');

    if ($desc !== '') {
        echo '<div class="category-extra-description">';
        echo wp_kses_post($desc);
        echo '</div>';
    }
}
?>

Какие поля лучше выводить с экранированием

Обычный текст

Используйте:

esc_html()

Подходит для:

  • cat_version
  • bg_category

URL

Используйте:

esc_url()

Подходит для:

  • cat_rss
  • cat_leftlink
  • cat_rightlink

HTML-текст

Используйте:

wp_kses_post()

Подходит для:

  • cat_add_description

Доверенный HTML/JS-код

Используйте осторожно:

echo $banner;

Подходит для:

  • cat_adsense1
  • cat_headerbanner

Где лучше выводить эти данные

Это зависит от вашей темы. Обычно вывод добавляют в один из файлов:

  • category.php
  • archive.php
  • taxonomy.php

Если используется GeneratePress или другая тема с хуками, удобнее выводить данные через хуки или child theme, а не править шаблоны напрямую.


Рекомендации по доработке

При желании плагин можно расширить:

  • добавить поля и на страницу создания категории, а не только редактирования
  • добавить поддержку других таксономий
  • вынести настройки в отдельный класс рендера
  • добавить миграцию старых данных из get_option("category_ID")
  • добавить шорткоды
  • добавить виджет или блок Gutenberg для вывода данных категории

Ограничения текущей версии

  • плагин добавляет поля только на страницу редактирования существующей категории
  • не добавляет поля на форму создания новой категории
  • работает только с таксономией category
  • старые данные из legacy-кода через get_option("category_ID") автоматически не переносятся

Пример структуры плагина

category-custom-settings/
└── category-custom-settings.php

Лицензия

GPL2+


Авторская заметка

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