get_edit_term_link()

Возвращает URL, ведущий на страницу редактирования элемента таксономии в админке.

В случае, если передано название несуществующей таксономии, ничего не возвращает.

В случае, если у текущего пользователя нет прав на редактирование данного элемента таксономии current_user_can( 'edit_term', $term_id ), ничего не возвращает.

get_edit_term_link( $term_id, $taxonomy = '', $object_type = '' )

Параметры

$term_id
(целое|WP_Term) ID или объект термина, ссылку на редактирование которого нужно вернуть.
 
Кстати, ID текущего элемента таксономии, на странице которого находимся, мы можем получить функцией get_queried_object_id()
$taxonomy
Название таксономии.
 
Если параметр не указан, то в первом параметре вам обязательно нужно передать не ID, а объект термина.
$object_type
(строка) Название типа поста.
 
Нужен только в том случае, когда таксономия присвоена сразу нескольким типам записи. Тогда, при переходе на страницу её редактирования в админке, мы можем подсветить активным в меню тот тип записи, который нужно, подробнее в примере 2.

Примеры

1. Выводим ссылку на редактирование текущей рубрики

То, что я вам сейчас покажу, я полагаю, лучше реализовать функцией edit_term_link().

$edit_term_link = get_edit_term_link( get_queried_object_id(), 'category' ) );
 
// окей, у пользователя есть права на редактирование, выводим ссылку
if( $edit_term_link ) {
	echo '<a href="' . $edit_term_link . '">Редактировать рубрику</a>';
}

Воспользовавшись функцией get_query_var(), мы можем применить данный код не только к рубрикам, но и к любым другим элементам таксономий автоматически:

$edit_term_link = get_edit_term_link( get_queried_object_id(), get_query_var( 'taxonomy' ) ) );
 
// окей, у пользователя есть права на редактирование, выводим ссылку
if( $edit_term_link ) {
	echo '<a href="' . $edit_term_link . '">Редактировать</a>';
}

Соответственно этот код нужно использовать в шаблонах архивов таксономий/рубрик/меток.

2. Разбор параметра $object_type

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

Например даже на моём сайте таксономия «Метки» присвоена к «Записи» и «Видеоуроки». А значит и в админ-меню она появится и под записями, и под видеоуроками. Тогда возникает вопрос, как определиться, какое родительское меню открывать при переходе на редактирование метки? Вот тут и вмешивается параметр $object_type, который добавляет к урлу редактирования $_GET-параметр post_type, отвечающий за выделение активного пункта админ-меню.

Чекаем примеры:

$edit_url = get_edit_term_link( $tag_id, 'post_tag', 'post' ) );
// http://.../wp-admin/edit-tags.php?taxonomy=post_tag&post_type=post
пример использования функции get_edit_term_link()
$edit_url = get_edit_term_link( $tag_id, 'post_tag', 'videourok' ) );
// http://.../wp-admin/edit-tags.php?taxonomy=post_tag&post_type=videourok
второй пример функции get_edit_term_link()

Хуки

Перед тем, как функция возвращает URL, к нему применяется этот фильтр-хук. Тут например мы можем повеселиться с функциями add_query_arg() и remove_query_arg().

Изменения будут применены для всех использований функции на сайте.

Предположим, что мы хотим, чтобы при переходе на редактирование метки, у нас всегда подсвечивался пункт меню «Видеоуроки» и… например добавить ещё какой-то $_GET-параметр!

add_filter( 'get_edit_term_link', 'true_change_edit_term_link', 25, 4 );
 
function true_change_edit_term_link( $location, $term_id, $taxonomy, $object_type ) {
 
	// чекаем переданнный параметр $taxonomy, если не Метки – выходим
	if( 'post_tag' !== $taxonomy ) {
		return $location;
	}
 
	if( $object_type ) {
		$location = remove_query_arg( 'post_type', $location );
	}
 
	$location = add_query_arg(
		array(
			'post_type' => 'videourok',
			'test' => 'yes',
		),
		$location
	);
 
	return $location;
 
}

Не знаете, как работать с фильтрами?

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Пишите, если нужна помощь с сайтом или разработка с нуля.

Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.