WordPress Version: 6.3
/**
* Handles tag search via AJAX.
*
* @since 3.1.0
*/
function wp_ajax_ajax_tag_search()
{
if (!isset($_GET['tax'])) {
wp_die(0);
}
$taxonomy = sanitize_key($_GET['tax']);
$taxonomy_object = get_taxonomy($taxonomy);
if (!$taxonomy_object) {
wp_die(0);
}
if (!current_user_can($taxonomy_object->cap->assign_terms)) {
wp_die(-1);
}
$search = wp_unslash($_GET['q']);
$comma = _x(',', 'tag delimiter');
if (',' !== $comma) {
$search = str_replace($comma, ',', $search);
}
if (str_contains($search, ',')) {
$search = explode(',', $search);
$search = $search[count($search) - 1];
}
$search = trim($search);
/**
* Filters the minimum number of characters required to fire a tag search via Ajax.
*
* @since 4.0.0
*
* @param int $characters The minimum number of characters required. Default 2.
* @param WP_Taxonomy $taxonomy_object The taxonomy object.
* @param string $search The search term.
*/
$term_search_min_chars = (int) apply_filters('term_search_min_chars', 2, $taxonomy_object, $search);
/*
* Require $term_search_min_chars chars for matching (default: 2)
* ensure it's a non-negative, non-zero integer.
*/
if (0 == $term_search_min_chars || strlen($search) < $term_search_min_chars) {
wp_die();
}
$results = get_terms(array('taxonomy' => $taxonomy, 'name__like' => $search, 'fields' => 'names', 'hide_empty' => false, 'number' => isset($_GET['number']) ? (int) $_GET['number'] : 0));
/**
* Filters the Ajax term search results.
*
* @since 6.1.0
*
* @param string[] $results Array of term names.
* @param WP_Taxonomy $taxonomy_object The taxonomy object.
* @param string $search The search term.
*/
$results = apply_filters('ajax_term_search_results', $results, $taxonomy_object, $search);
echo implode("\n", $results);
wp_die();
}