Дизайн та розробка сайту

Як додати на сторінку редагування рубрик, міток і інших таксономій свої поля в WordPress

Как добавить на страницу редактирования рубрик, меток и других таксономий свои поля в WordPress

Доброго вам дня

Дана стаття буде як продовження або доповнення до попередньої, де ми з вами додавали візуальний редактор в опис таксономій. Саме поле опис є завжди, це стандартне поле для виведення інформації про таксономії на сайті. Якщо ви займаєтеся розробкою тем для WordPress чи редагуєте тему, що встановлена ​​у вас на сайті і вам потрібно додати нові поля для виведення додаткової інформації то вам буде корисна ця стаття. Щоб ознайомиться з попередньою перейдіть за посиланням - Як додати візуальний редактор в опис рубрик та міток в WordPress

Как добавить на страницу редактирования рубрик, меток и других таксономий свои поля в WordPress

Для чого вам можуть знадобитися додаткові поля для категорій, міток і інших таксономій? Дуже просто, раптом ви захочете виводити додаткову інформацію, яку потрібно відокремити від основного опису. Застосувань може бути багато, та й якщо ви потрапили на цю статтю, значить у вас теж є потреба зробити додаткові поля на сторінці редагування таксономій. Особисто мені, кілька разів потрібен був такий функціонал. Один раз замовник попросив додати поля для СЕО. Він не хотів використовувати плагіни у нього був свій метод реалізації, з яким йому допоміг я. Так само був випадок, коли після всіх записів рубрики треба було виводити інформацію що відноситься до рубрики. Не будемо затягувати і приступимо до виконання задуманого.

Перше що потрібно додати додати подію, в якій запустимо нашу функцію і застосуємо її до потрібної таксономії. В даному прикладі це будуть звичайні категорії.

Щоб це зробити, потрібно додати невеликий код в файл функцій вашої теми - 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 якій присвоюємо вміст додаткового поля. Для кожного поля - своя змінна, якщо ви заводили кілька, думаю, це зрозуміло.

Далі перевіряємо, чи не порожня наша змінна, тобто чи заповнене поле в адмінці і якщо все ок, то виводимо його вміст.

Якщо все зроблено правильно, тепер ви можете додавати поля з додатковою інформацією для своїх таксономій.

На цьому все, дякую за увагу. 🙂

Дизайн та розробка сайту

Back to top