Для чого вам можуть знадобитися додаткові поля для категорій, міток і інших таксономій? Дуже просто, раптом ви захочете виводити додаткову інформацію, яку потрібно відокремити від основного опису. Застосувань може бути багато, та й якщо ви потрапили на цю статтю, значить у вас теж є потреба зробити додаткові поля на сторінці редагування таксономій. Особисто мені, кілька разів потрібен був такий функціонал. Один раз замовник попросив додати поля для СЕО. Він не хотів використовувати плагіни у нього був свій метод реалізації, з яким йому допоміг я. Так само був випадок, коли після всіх записів рубрики треба було виводити інформацію що відноситься до рубрики. Не будемо затягувати і приступимо до виконання задуманого.
Перше що потрібно додати додати подію, в якій запустимо нашу функцію і застосуємо її до потрібної таксономії. В даному прикладі це будуть звичайні категорії.
Щоб це зробити, потрібно додати невеликий код в файл функцій вашої теми - 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_verify_nonce( $_POST['_wpnonce_add-tag'], "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($cat_id, 'taxonomy_custfield1', 1 ));
if(!empty($taxonomy_custfield1)){
echo '<div>'.$taxonomy_custfield1.'</div>';
}
З кодом все просто. Спочатку створюємо змінну - $taxonomy_custfield1 якій присвоюємо вміст додаткового поля. Для кожного поля - своя змінна, якщо ви заводили кілька, думаю, це зрозуміло.
Далі перевіряємо, чи не порожня наша змінна, тобто чи заповнене поле в адмінці і якщо все ок, то виводимо його вміст.
Якщо все зроблено правильно, тепер ви можете додавати поля з додатковою інформацією для своїх таксономій.
На цьому все, дякую за увагу. 🙂