Как добавить произвольные поля к категории в вордпресс?

Решено

Мне нужно добавить дополнительный текст и изображение в категорию вордпресс. Что бы при создании новой категории была возможность загрузить свое изображение и прописать еще один текст кроме описания категории. Скаите можно ли вообще добавлять произвольные поля к категориям? Как добавить свои произвольные поля в стандартный раздел категорий category?

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

Для того что бы добавить свои произвольные поля в категории вордпресс(таксономия category) нужно приписать следующий код в файле functions.php который расположен в папке с вашим шаблоном.

 // добавляет вызов функции при инициализации административного раздела
 add_action('admin_init', 'category_custom_fields', 1);
// функция расширения функционала административного раздела
 function category_custom_fields() {
 // добавления действия после отображения формы ввода параметров категории
 add_action('lift_edit_form_fields', 'category_custom_fields_form');
 // add_action('cat_add_form_fields', 'category_custom_fields_form');   - можно добавить поля при создании категории, но могут быть проблемы, так как категории сохраняются через ajax
 // добавления действия при сохранении формы ввода параметров категории
 add_action('edited_lift', 'category_custom_fields_save');
 }
 

С помощью данного кода мы добавим произвольные поля к таксономии lift. Если вам нужно добавить для категорий замените lift на caregory. Пример:

 function category_custom_fields() {
 add_action('category_edit_form_fields', 'category_custom_fields_form');
 add_action('edited_category', 'category_custom_fields_save');
 }
 

Далее добавим 2 поля для изображения и для текста в раздел редактирования таксономии(категории)

 function category_custom_fields_form($tag) {
 $t_id = $tag->term_id;
 $cat_meta = get_option("category_$t_id");
 ?>
 <!-- изображение 1 -->
 <tr class="form-field">
 <th scope="row" valign="top"><label for="extra1">Изображение:</label></th>
 <td>
 <a href="#" class="upload_cat_img">Загрузить</a>
 <input class="cat_img" type="text" name="Cat_meta[cat_title]" id="Cat_meta[cat_title]" size="25" style="width:60%;" value="<?php
 echo
 $cat_meta['cat_title'] ? $cat_meta['cat_title'] : '';
 ?>"><br />
 </td>
 </tr>
 <!-- текст -->
 <tr class="form-field">
 <th scope="row" valign="top"><label for="extra1">Текст 1:</label></th>
 <td>
 <textarea name="Cat_meta[cat_text1]" id="Cat_meta[cat_text1]"><?php echo $cat_meta['cat_text1'] ? $cat_meta['cat_text1'] : ''; ?></textarea>
 <!--<input class="cat_img" type="text" name="Cat_meta[cat_title]" id="Cat_meta[cat_title]" size="25" style="width:60%;" value="<?php
 echo
 $cat_meta['cat_title'] ? $cat_meta['cat_title'] : '';
 ?>"> -->
 <br />
 </td>
 </tr>
 <?php
 }
 

Теперь нам нужно написать обработчик который будет сохранять наши поля:

 function category_custom_fields_save($term_id) {
 if (isset($_POST['Cat_meta'])) {
 $t_id = $term_id;
 $cat_meta = get_option("category_$t_id");
 $cat_keys = array_keys($_POST['Cat_meta']);
 foreach ($cat_keys as $key) {
 if (isset($_POST['Cat_meta'][$key])) {
 $cat_meta[$key] = $_POST['Cat_meta'][$key];
 }
 }
 //save the option array
 update_option("category_$t_id", $cat_meta);
 }
 }
 

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

 // add js scripts
 wp_enqueue_script('te_portfolio_admin_js', get_bloginfo('template_url') . '/settings.js', array('jquery'), false, true);
 

Сам js файл дожен содержать следующий код:

 jQuery(function() {
 /* add category img */
 jQuery('.upload_cat_img').click(function() {
 var send_attachment_bkp = wp.media.editor.send.attachment;
 wp.media.editor.send.attachment = function(props, attachment) {
 jQuery('.cat_img').val(attachment.url);
 wp.media.editor.send.attachment = send_attachment_bkp;
 };
 wp.media.editor.open();
 return false;
 });
 

Файл js должен называться settings.js и лежать в одном каталоге с functions.php

Теперь осталось вывести в нужном месте наши данные которые уже сохраняются при редактировании таксономии(категории)

$term = get_queried_object();
 $cat_id = $term->term_id; // $term->term_id - это id таксономии или категории
 // извлекаем данные наших произвольных полей для категории
 $cat_data = get_option("category_$cat_id");
 // Пример вывода текстового поля
 echo $cat_data['cat_title'];
 

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

Добрый день, спасибо за этот ответ. Поля вывелись но вот загрузчик изображения не работает, в консоли при нажатии а кнопку «Загрузить» появляется ошибка: Uncaught TypeError: Cannot read property ‘editor’ of undefined

Подскажите, как исправить эту проблему?

Посмотрите другие вопросы:
Загрузчик вордпресс

В частности:
http://onwp.ru/question/funkciya-vyzova-zagruzchika-vordpress— тут используется немного другой код ля подключения загрузчика.

в 01.02.2016.
Добавить Комментарий

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

Задайте отдельный вопрос и распишите его более подробно.

в 01.02.2016.
Добавить Комментарий

Все сделал по инструкции, вывод на фронте в категории не работает 🙁

 $term = get_queried_object();
 $cat_id = $term->term_id; // $term->term_id - это id таксономии или категории
 // извлекаем данные наших произвольных полей для категории
 $cat_data = get_option("category_$cat_id");
 // Пример вывода текстового поля
 echo $cat_data['cat_title'];
 

или

$categories = get_the_category();
 $cat_id = $categories[0]->cat_ID; // $term->term_id - это id таксономии или категории
 // извлекаем данные наших произвольных полей для категории
 $cat_data = get_option("category_$cat_id");
 // Пример вывода текстового поля
 echo $cat_data['cat_title'];
в 08.04.2016.

Доброго вам времени суток! Может я что-то не так делаю, или не так понял, но очень нужно решить проблему.
добавляю в functions.php этот код

add_action('admin_init', 'category_custom_fields', 1);
function category_custom_fields() {
    add_action('category_edit_form_fields', 'category_custom_fields_form');
    add_action('edited_category', 'category_custom_fields_save');
}
function category_custom_fields_form($tag) {
    $t_id = $tag->term_id;
    $cat_meta = get_option("category_$t_id");
    ?>
    <!-- текст -->
    <tr class="form-field">
        <th scope="row"valign="top"><label for="extra1">Текст 1:</label></th>
        <td>
            <textarea name="Cat_meta[cat_text1]"id="Cat_meta[cat_text1]"><?php echo$cat_meta['cat_text1'] ? $cat_meta['cat_text1'] : ''; ?></textarea>
            <!--<input class="cat_img"type="text"name="Cat_meta[cat_title]"id="Cat_meta[cat_title]"size="25"style="width:60%;"value="<?php
            echo
            $cat_meta['cat_title'] ? $cat_meta['cat_title'] : '';
            ?>"> -->
            <br />
        </td>
    </tr>
    <?php
}
function category_custom_fields_save($term_id) {
    if (isset($_POST['Cat_meta'])) {
        $t_id = $term_id;
        $cat_meta = get_option("category_$t_id");
        $cat_keys = array_keys($_POST['Cat_meta']);
        foreach ($cat_keys as $key) {
            if (isset($_POST['Cat_meta'][$key])) {
                $cat_meta[$key] = $_POST['Cat_meta'][$key];
            }
        }
//save the option array
        update_option("category_$t_id", $cat_meta);
    }
}

Данные в произвольных полях категорий сохраняются. В шаблоне вывода категории пишу

<?php $term = get_queried_object();
$cat_id = $term->term_id; // $term->term_id - это id таксономии или категории
// извлекаем данные наших произвольных полей для категории
$cat_data = get_option("category_$cat_id");
// Пример вывода текстового поля
echo $cat_data['cat_title'];?>

или

<?php $categories = get_the_category();
 $cat_id = $categories[0]->cat_ID; // $term->term_id - это id таксономии или категории
 // извлекаем данные наших произвольных полей для категории
 $cat_data = get_option("category_$cat_id ");
 // Пример вывода текстового поля
 echo $cat_data['cat_title'];?>

Но ничего на фронтенде не выводит 🙁 Плиз ХЕЛП!!!

 

в 13.04.2016.

Вы в функции category_custom_fields_form($tag) назвали переменную(элемент массива) cat_text1 а выводите cat_text

Выводите:

 <?php $term = get_queried_object();
 $cat_id = $term->term_id; // $term->term_id - это id таксономии или категории
 // извлекаем данные наших произвольных полей для категории
 $cat_data = get_option("category_$cat_id");
 // Пример вывода текстового поля
 echo $cat_data['cat_text1'];
 ?>
 
в 14.04.2016.
Добавить Комментарий

добавил в functions.php и при редактировании рубрики доп полей нету

function category_custom_fields() {
add_action('category_edit_form_fields', 'category_custom_fields_form');
add_action('edited_category', 'category_custom_fields_save');
}
function category_custom_fields_form($tag) {
$t_id= $tag->term_id;
$cat_meta= get_option("category_$t_id");
?>
<!-- текст -->
<tr class="form-field">
<th scope="row"valign="top"><label for="extra1">Текст 1:</label></th>
<td>
<textarea name="Cat_meta[cat_text1]"id="Cat_meta[cat_text1]"><?php echo$cat_meta['cat_text1'] ? $cat_meta['cat_text1'] : ''; ?></textarea>
<!--<input class="cat_img"type="text"name="Cat_meta[cat_title]"id="Cat_meta[cat_title]"size="25"style="width:60%;"value="<?php
echo
$cat_meta['cat_title'] ? $cat_meta['cat_title'] : '';
?>"> -->
<br />
</td>
</tr>
<?php
}
function category_custom_fields_save($term_id) {
if (isset($_POST['Cat_meta'])) {
$t_id = $term_id;
$cat_meta = get_option("category_$t_id");
$cat_keys = array_keys($_POST['Cat_meta']);
foreach ($cat_keys as $key) {
if (isset($_POST['Cat_meta'][$key])) {
$cat_meta[$key] = $_POST['Cat_meta'][$key];
}
}
//save the option array
update_option("category_$t_id", $cat_meta);
}
}

Вы не повесили событие на хук admin_init для инициализации всего кода. Допишите вверху:


add_action('admin_init', 'category_custom_fields', 1);

В примере это есть.

в 10.04.2016.
Добавить Комментарий

Делаю всё, как написано. Получаю ошибку 500.

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

Здравствуйте. Код рабочий.

Проверьте что действительно добавили все куда нужно.

Проверьте что добавлены все функции.

Попробуйте поменять названия функциям, может у вас уже есть с таким же названием, например:

// Было

add_action('admin_init', 'category_custom_fields', 1);

function category_custom_fields() {

add_action('lift_edit_form_fields', 'category_custom_fields_form');

add_action('edited_lift', 'category_custom_fields_save');

}
/* ....... и так далее */
// Нужно
add_action('admin_init', 'onwp_category_custom_fields', 1);

function onwp_category_custom_fields() {

add_action('lift_edit_form_fields', 'onwp_category_custom_fields_form');

add_action('edited_lift', 'onwp_category_custom_fields_save');

}
/* ....... и так далее */

к названием функций добавили префикс «onwp_»

в 06.02.2017.
Добавить Комментарий

Доброго времени суток, скажите а подойдёт этот код не для какой то отдельной категории, а для всех категорий?

Данный код для всех категорий.

в 21.03.2017.

скажите а в какое место добавляем данный код? И весь этот код вставляем в functions.php который находится в папке шаблона?

в 22.03.2017.

Добавил код в админке поле появилось, а на сайт не выводит

Использовал  код ardeil который предложил, а что дописать к нему не соображу, помогите пжл.

 

 
в 22.03.2017.

Значение в поле сохраняется? Как выводите значение, так:


$term = get_queried_object();

$cat_id = $term->term_id; // $term->term_id - это id таксономии или категории

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

$cat_data = get_option("category_$cat_id");

// Пример вывода текстового поля

echo $cat_data['cat_title'];

в 22.03.2017.

Да значение в поле сохраняется. Я в php не силён, я взял код из комментария Ardeil, он текст сохраняет, а на сайт не выводит

add_action('admin_init', 'category_custom_fields', 1);
function category_custom_fields() {
 add_action('category_edit_form_fields', 'category_custom_fields_form');
 add_action('edited_category', 'category_custom_fields_save');
}
function category_custom_fields_form($tag) {
 $t_id = $tag->term_id;
 $cat_meta = get_option("category_$t_id");
 ?>
 <!-- текст -->
 <tr class="form-field">
 <th scope="row"valign="top"><label for="extra1">Текст 1:</label></th>
 <td>
 <textarea name="Cat_meta[cat_text1]"id="Cat_meta[cat_text1]"><?php echo$cat_meta['cat_text1'] ? $cat_meta['cat_text1'] : ''; ?></textarea>
 <!--<input class="cat_img"type="text"name="Cat_meta[cat_title]"id="Cat_meta[cat_title]"size="25"style="width:60%;"value="
 <?php
 echo
 $cat_meta['cat_title'] ? $cat_meta['cat_title'] : '';
 ?>"> -->
 <br />
 </td>
 </tr>
 <?php
}
function category_custom_fields_save($term_id) {
 if (isset($_POST['Cat_meta'])) {
 $t_id = $term_id;
 $cat_meta = get_option("category_$t_id");
 $cat_keys = array_keys($_POST['Cat_meta']);
 foreach ($cat_keys as $key) {
 if (isset($_POST['Cat_meta'][$key])) {
 $cat_meta[$key] = $_POST['Cat_meta'][$key];
 }
 }
//save the option array
 update_option("category_$t_id", $cat_meta);
 }
}

P.S. И для категорий товара используем этот же код?

в 22.03.2017.

вам в шаблоне нужно найти место куда вы хотите вывести эту информации и прописать:


$term = get_queried_object();

$cat_id = $term->term_id; // $term->term_id - это id таксономии или категории

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

$cat_data = get_option("category_$cat_id");

// Пример вывода текстового поля

echo $cat_data['cat_title'];

Все работает, просто вы сохранили, и нигде не вывели.

Данный код для таксономии «category», в примере(который ответ) там для таксономии lift

в 22.03.2017.
Добавить Комментарий

add_action('admin_init', 'category_custom_fields', 1);

function category_custom_fields() {

add_action('category_edit_form_fields', 'category_custom_fields_form');

add_action('edited_category', 'category_custom_fields_save');

}
function category_custom_fields_form($tag) {

$t_id = $tag->term_id;

$cat_meta = get_option("category_$t_id");

?>

<!-- текст -->

<tr class="form-field">

<th scope="row"valign="top"><label for="extra1">Краткое описание:</label></th>

<td>

<textarea name="Cat_meta[cat_text1]"id="Cat_meta[cat_text1]"><?php echo$cat_meta['cat_text1'] ? $cat_meta['cat_text1'] : ''; ?></textarea>

<?php

echo

$cat_meta['cat_title'] ? $cat_meta['cat_title'] : '';

?>

<br />

</td>

</tr>

<?php

}
function category_custom_fields_save($term_id) {

if (isset($_POST['Cat_meta'])) {

$t_id = $term_id;

$cat_meta = get_option("category_$t_id");

$cat_keys = array_keys($_POST['Cat_meta']);

foreach ($cat_keys as $key) {

if (isset($_POST['Cat_meta'][$key])) {

$cat_meta[$key] = $_POST['Cat_meta'][$key];

}

}

//save the option array

update_option("category_$t_id", $cat_meta);

}

}

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

У меня в категории товара не добавляются поля, но в рубриках постов все норм работает, юзаю плагин Вукомерс.

ХЕЛП!!

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

Ваш ответ

Размещая свой ответ, вы соглашаетесь с правилами сайта.