Для чего вам могут понадобится дополнительные поля для категорий, меток и других таксономий? Очень просто, вдруг вы захотите выводить дополнительную информацию, которую нужно отделить от основного описания. Применений может быть много, да и если вы попали на эту статью, значит у вас тоже есть надобность сделать дополнительные поля на странице редактирования таксономий. Лично мне, несколько раз надо был такой функционал. Один раз заказчик попросил добавить поля для СЕО. Он не хотел использовать плагины у него был свой метод реализации, с которым ему помог я. Так же был случай, когда после всех записей рубрики надо было выводить информацию что относится к рубрике. Не будем затягивать и приступим к выполнению задуманного.
Первое что нужно добавить добавить событие, в котором запустим нашу функцию и применим ее к нужной таксономии. В данном примере это будут обычные категории.
Чтобы это сделать, нужно добавить небольшой код в файл функций вашей темы - function.php. Добавляете в самый конец перед закрывающим тегом PHP ?>. Если его нет, то просто в самый конец.
Перед изменением function.php, обязательно сохраните его копию, чтобы в дальнейшем, в случаи ошибки, вернуть все как было. Так же, можете использовать дочернюю тему. Если вы не знаете что это такое, то ознакомьтесь со статьей - Дочерние темы WordPress.
add_action("category_edit_form_fields", 'edit_new_custom_fields');
В прошлой статье я описывал как работает данное событие и как правильно указывать таксономию, кому лень переходить и читать - повторю. Если вам надо так же добавить свое описание к Меткам, то событие будет такое:
add_action('post_tag_edit_form_fields','edit_new_custom_fields');
Вообще, суть события - {taxonomy}_edit_form_fields, в том, что вместо {taxonomy}, указываете нужную таксономию:
- category - для рубрик
- post_tag - для меток
- person - если вы, например создали свою таксономию - Персоны и назвали ее person. Подробнее об этом в статье - Создание своей таксономии в WordPress.
Сразу после события, добавляем функцию - edit_new_custom_fields
function edit_new_custom_fields( $term ) { ?> <tr class="form-field"> <th scope="row" valign="top"><label>Дополнительное поле</label></th> <td><?php $taxonomy_custfield1 = esc_attr( get_term_meta( $term->term_id, 'taxonomy_custfield1', 1 ) ); wp_editor(htmlspecialchars_decode($taxonomy_custfield1) , 'wpeditor_taxonomy_custfield1', array('textarea_name' => 'extra[taxonomy_custfield1]','textarea_rows' => 10,'editor_css' => '<style>.html-active .wp-editor-area{border:0;}</style>','wpautop' => 1,) ); ?> <span class="description">Дополнительное поле для таксономии.</span></td> </tr> <?php }
Тут мы просто добавили в строку таблицы, что выводится на странице редактирования таксономии, в которой и покажется наше новое поле в виде текстовой области. Если вам надо не текстовое поле, а прросто строка для ввода, то замените 4,5,6 строку с редактором на следующую:
<td><input type="text" name="extra[taxonomy_custfield1]" value="<?php echo esc_attr( get_term_meta( $term->term_id, 'taxonomy_custfield1', 1 ) ) ?>"></td>
Обратите внимание, что у полей есть уникальный идентификатор - taxonomy_custfield1. Не забудьте для каждого нового поля указывать уникальный. Полей можете добавлять сколько угодно.
Теперь надо добавить событие и функцию для сохранения нашего поля или полей если вы добавляли несколько.
add_action("edited_category", 'save_custom_taxonomy_meta');
Событие - edited_{taxonomy}, работает точно так же , как описывал ранее {taxonomy}_edit_form_fields, вместо {taxonomy}, указываете нужную таксономию.
Теперь сама функция - save_custom_taxonomy_meta для сохранения всего.
function save_custom_taxonomy_meta( $term_id ){ if ( ! isset($_POST['extra']) ) return; if ( ! current_user_can('edit_term', $term_id) ) return; if ( ! wp_verify_nonce( $_POST['_wpnonce'], "update-tag_$term_id" ) && // wp_nonce_field( 'update-tag_' . $tag_ID ); ! wp_verify_nonce( $_POST['_wpnonce_add-tag'], "add-tag" ) // wp_nonce_field('add-tag', '_wpnonce_add-tag'); ) return; $extra = $_POST['extra']; foreach( $extra as $key => $val ){ $_key = sanitize_key( $key ); if( $_key !== $key ) wp_die( 'bad key'. esc_html($key) ); if( $_key === 'tag_posts_shortcode_links' ) $val = $val; else $val = $val; if( ! $val ) delete_term_meta( $term_id, $_key ); else update_term_meta( $term_id, $_key, $val ); } return $term_id; }
Эта функция не требует правок и изменений. Просто добавляете и все.
Теперь надо вывести полученную информацию. Выводить ее можно на странице категории или записи, в общим там, где это вам нужно. Назвать конкретный файл не могу, потому как зависит от темы. Чаще всего - это single.php или category.php.
$taxonomy_custfield1 = get_term_meta($term_id, 'taxonomy_custfield1', 1 ); if(!empty($taxonomy_custfield1)){ echo '<div>'.$taxonomy_custfield1.'</div>'; }
По коду все просто. Сначала создаем переменную - $taxonomy_custfield1 которой присваиваем содержимое дополнительного поля. Для каждого поля - своя переменная, если вы заводили несколько, думаю, это понятно.
$term_id - ID термина. Тоесть категории, метки, термина собственной таксономиии.
Далее проверяем не пустая ли наша переменная, то есть заполнено ли поле в админке и если все ок, то выводим его содержимое.
Если все сделано правильно, теперь вы можете добавлять поля с дополнительной информацией для своих таксономий.
На этом все, спасибо за внимание. 🙂