Как добавить произвольные поля к категории в вордпресс?
Мне нужно добавить дополнительный текст и изображение в категорию вордпресс. Что бы при создании новой категории была возможность загрузить свое изображение и прописать еще один текст кроме описания категории. Скаите можно ли вообще добавлять произвольные поля к категориям? Как добавить свои произвольные поля в стандартный раздел категорий 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— тут используется немного другой код ля подключения загрузчика.
Здравствуйте. Помогите, пожалуйста, что нужно сделать для добавления картинки, как произвольного поля?
trubine, большое спасибо, все заработало, теперь другая проблема: на странице таксономии я не могу получить данные произвольных полей, все упирается в id таксономии и я не знаю откуда его взять. Помогите пожалуйста решить этот вопрос.

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

$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'];
Доброго вам времени суток! Может я что-то не так делаю, или не так понял, но очень нужно решить проблему.
добавляю в 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'];?>
Но ничего на фронтенде не выводит 🙁 Плиз ХЕЛП!!!

Вы в функции 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']; ?>
добавил в 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);
В примере это есть.
Делаю всё, как написано. Получаю ошибку 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_»
Доброго времени суток, скажите а подойдёт этот код не для какой то отдельной категории, а для всех категорий?

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

Значение в поле сохраняется? Как выводите значение, так:
$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 не силён, я взял код из комментария 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. И для категорий товара используем этот же код?

вам в шаблоне нужно найти место куда вы хотите вывести эту информации и прописать:
$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
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); } }
У меня в категории товара не добавляются поля, но в рубриках постов все норм работает, юзаю плагин Вукомерс.
ХЕЛП!!
А как обработать checkbox
Например: в свойствах рубрики задать checkBox, а на странице рубрики проверить состояние этого свойства и вывести какой-то контент…