WordPress как на ладони
Дешевый WordPress пакет для разработки Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

(taxonomy)_edit_form_fields хук-событие . WP 3.0

Позволяет добавить дополнительные поля (произвольные поля или метаполя) на страницу редактирования элементов таксономии (термина).

Используйте (taxonomy)_add_form_fields, когда нужно добавить поля на страницу добавления термина.

Использование

add_action( '{$taxonomy}_edit_form_fields', 'action_function_name_6545', 10, 2 );
function action_function_name_6545( $tag, $taxonomy ) {
	// Действие...
}
$tag(объект)
Объект текущей таксономии

Примеры

#1 Добавим метаполя при создании и редактировании элемента таксономии.

В этом примере мы добавим 2 поля «Заголовок» и «Описание», для стандартной таксономии category т.е. для рубрик WordPress.

<?php
$taxname = 'category';

// Поля при добавлении элемента таксономии
add_action("{$taxname}_add_form_fields", 'add_new_custom_fields');
// Поля при редактировании элемента таксономии
add_action("{$taxname}_edit_form_fields", 'edit_new_custom_fields');

// Сохранение при добавлении элемента таксономии
add_action("create_{$taxname}", 'save_custom_taxonomy_meta');
// Сохранение при редактировании элемента таксономии
add_action("edited_{$taxname}", 'save_custom_taxonomy_meta');

function edit_new_custom_fields( $term ) {
	?>
		<tr class="form-field">
			<th scope="row" valign="top"><label>Заголовок</label></th>
			<td>
				<input type="text" name="extra[title]" value="<?php echo esc_attr( get_term_meta( $term->term_id, 'title', 1 ) ) ?>"><br />
				<span class="description">SEO заголовок (title)</span>
			</td>
		</tr>
		<tr class="form-field">
			<th scope="row" valign="top"><label>Описание</label></th>
			<td>
				<input type="text" name="extra[meta_description]" value="<?php echo esc_attr( get_term_meta( $term->term_id, 'meta_description', 1 ) ) ?>"><br />
				<span class="description">SEO описание (description)</span>
			</td>
		</tr>
		<tr class="form-field">
			<th scope="row" valign="top"><label>Ключевые слова</label></th>
			<td>
				<input type="text" name="extra[keywords]" value="<?php echo esc_attr( get_term_meta( $term->term_id, 'keywords', 1 ) ) ?>"><br />
				<span class="keywords">SEO ключевые слова (keywords)</span>
			</td>
		</tr>
	<?php
}

function add_new_custom_fields( $taxonomy_slug ){
	?>
	<div class="form-field">
		<label for="tag-title">Заголовок</label>
		<input name="extra[title]" id="tag-title" type="text" value="" />
		<p>SEO заголовок (title)</p>
	</div>
	<div class="form-field">
		<label for="tag-description">Описание</label>
		<input name="extra[description]" id="tag-description" type="text" value="" />
		<p>SEO описание (description)</p>
	</div>
	<div class="form-field">
		<label for="tag-keywords">Ключевые слова</label>
		<input name="extra[keywords]" id="tag-keywords" type="text" value="" />
		<p>SEO ключевые слова (keywords)</p>
	</div>
	<?php
}

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 = wp_unslash($_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 = sanitize_textarea_field( strip_tags($val) );
		else
			$val = sanitize_text_field( $val );

		// сохранение
		if( ! $val )
			delete_term_meta( $term_id, $_key );
		else
			update_term_meta( $term_id, $_key, $val );
	}

	return $term_id;
}

Получить эти метаполя затем можно в шаблоне или где-либо еще с помощью функции get_term_meta(). Например ID термина 10, тогда:

$title = get_term_meta( 10, 'title', 1 );
$meta_description = get_term_meta( 10, 'meta_description', 1 );

Где используется хук

В файле: /wp-admin/edit-tag-form.php

Код хука-события (taxonomy)_edit_form_fields

Фрагмент из: wp-admin/edit-tag-form.php VER 4.9.8
...
			 * @param object $tag Current tag term object.
			 */
			do_action( 'edit_tag_form_fields', $tag );
		}
		/**
		 * Fires after the Edit Term form fields are displayed.
		 *
		 * The dynamic portion of the hook name, `$taxonomy`, refers to
		 * the taxonomy slug.
		 *
		 * @since 3.0.0
		 *
		 * @param object $tag      Current taxonomy term object.
		 * @param string $taxonomy Current taxonomy slug.
		 */
		do_action( "{$taxonomy}_edit_form_fields", $tag, $taxonomy );
		?>
	</table>
<?php
// Back compat hooks
if ( 'category' == $taxonomy ) {
	/** This action is documented in wp-admin/edit-tags.php */
	do_action( 'edit_category_form', $tag );
} elseif ( 'link_category' == $taxonomy ) {
	/** This action is documented in wp-admin/edit-tags.php */
	do_action( 'edit_link_category_form', $tag );
} else {
	/**
	 * Fires at the end of the Edit Term form.
	 *
	 * @since 2.5.0
...
32 коммента
Полезные 2 Все
  • Александр

    Большое тебе спасибо! Сам долго вычитывал, но все что пробовал не работало...А тут все с первого раза. Дай Бог тебе добрый человек здоровья!!!

    1
  • Александр

    Возникла проблема. А почему данные могут не сохранятся в таксономии в поле?

    • Kama6958

      Смотря какие данные и как сохраняешь... Очищаются может не знаю.

      1
Здравствуйте, !     Войти . Зарегистрироваться