sanitize_term_field()

Владислав Белецкий
Владислав Белецкий .
Категория:
Комментариев: 0

Функция занимается очисткой информации об элементе таксономии.

Также позволяет добавлять в себя другие правила очистки в зависимости от контекста.

Возвращает очищенное значение.

sanitize_term_field( $field, $value, $term_id, $taxonomy, $context )

Параметры

$field
(строка) Ключ очищаемого поля.
 
По сути может быть названием любого свойства объекта WP_Term, да и вообще любым значением, однако, если вы передадите одно из следующих стандартных значений поля parent, term_id, count, term_group, term_taxonomy_id, object_id, то функция в первую очередь очистит их как целые неотрицательные числа вне зависимости от контекста.
$value
Очищаемое значение.
$term_id
(целое) ID термина.
$taxonomy
(строка) Название таксономии.
$context
(строка) Название контекста, в котором используется функция.

  • raw – без очистки.
  • edit – применяет фильтры edit_term_{$field} и edit_{$taxonomy}_{$field}. Кроме того, поле с ключом description очистится функцией esc_html(), а все остальные поля – функцией esc_attr().
  • db – применяет фильтры pre_term_{$field} и pre_{$taxonomy}_{$field}. Кроме того, к полю с ключом slug ещё и дополнительный фильтр pre_category_nicename. Например, когда вы передаёте ярлык метки в WP_Query, он очищается именно в этом контексте при построении запроса к БД.
  • rss – применяет фильтры term_{$field}_rss и {$taxonomy}_{$field}_rss.
  • attribute – применяет фильтры term_{$field} и {$taxonomy}_{$field}. А ещё очищает функцией esc_attr().
  • js – применяет фильтры term_{$field} и {$taxonomy}_{$field}. А ещё очищает функцией esc_js().
  • display (или любое произвольное значение) – применяет фильтры term_{$field} и {$taxonomy}_{$field}.

Хуки

Если вдруг вы не знаете, как работать с фильтрами.

edit_term_{$field}

$value = apply_filters( "edit_term_{$field}", $value, $term_id, $taxonomy );

edit_{$taxonomy}_{$field}

$value = apply_filters( "edit_{$taxonomy}_{$field}", $value, $term_id );

pre_term_{$field}

$value = apply_filters( "pre_term_{$field}", $value, $taxonomy );

pre_{$taxonomy}_{$field}

$value = apply_filters( "pre_{$taxonomy}_{$field}", $value );

pre_category_nicename

$value = apply_filters( 'pre_category_nicename', $value );

term_{$field}_rss

$value = apply_filters( "term_{$field}_rss", $value, $taxonomy );

{$taxonomy}_{$field}_rss

$value = apply_filters( "{$taxonomy}_{$field}_rss", $value );

term_{$field}

$value = apply_filters( "term_{$field}", $value, $term_id, $taxonomy, $context );

{$taxonomy}_{$field}

$value = apply_filters( "{$taxonomy}_{$field}", $value, $term_id, $context );

Пример

Нет, я не забыл про пример, но сначала хотел познакомить вас с хуками.

В этом примере я бы хотел поговорить с вами про постоение запроса при помощи WP_Query. Когда мы задаём какие-либо ярлыки меток при построении запроса:

// это наш код, например где-то в теме WordPress
$query = new WP_Query( array( 'tag' => 'travel,food' ) );

То внутри ядра WordPress значение каждого из этих ярлыков будет очищаться:

// это код внутри ядра
$tag = sanitize_term_field( 'slug', $tag, 0, 'post_tag', 'db' );

Так как значение контекста установлено в db (Database), то применятся фильтры pre_term_{$field}, и pre_{$taxonomy}_{$field} и pre_category_nicename.

И сейчас будет самый бесполезный, но надеюсь, очень понятный пример, при помощи одного из фильтров, к примеру pre_{$taxonomy}_{$field} поменяем значение ярлыка метки в запросе.

// pre_{название таксономии}_{название поля}
add_filter( 'pre_post_tag_slug', 'true_do_some_stuff', 25 );
 
function true_do_some_stuff( $value ) {
 
	// подменяем одно значение на другое
	return 'travel' === $value ? 'travel-to-asia' : $value;
 
}

Теперь при построении запросов при использовании ярлыка метки travel, у нас будут выводиться посты с меткой travel-to-asia.

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии