WordPress Version: 5.5
/**
* Prints the appropriate response to a menu quick search.
*
* @since 3.0.0
*
* @param array $request The unsanitized request values.
*/
function _wp_ajax_menu_quick_search($request = array())
{
$args = array();
$type = isset($request['type']) ? $request['type'] : '';
$object_type = isset($request['object_type']) ? $request['object_type'] : '';
$query = isset($request['q']) ? $request['q'] : '';
$response_format = isset($request['response-format']) ? $request['response-format'] : '';
if (!$response_format || !in_array($response_format, array('json', 'markup'), true)) {
$response_format = 'json';
}
if ('markup' === $response_format) {
$args['walker'] = new Walker_Nav_Menu_Checklist();
}
if ('get-post-item' === $type) {
if (post_type_exists($object_type)) {
if (isset($request['ID'])) {
$object_id = (int) $request['ID'];
if ('markup' === $response_format) {
echo walk_nav_menu_tree(array_map('wp_setup_nav_menu_item', array(get_post($object_id))), 0, (object) $args);
} elseif ('json' === $response_format) {
echo wp_json_encode(array('ID' => $object_id, 'post_title' => get_the_title($object_id), 'post_type' => get_post_type($object_id)));
echo "\n";
}
}
} elseif (taxonomy_exists($object_type)) {
if (isset($request['ID'])) {
$object_id = (int) $request['ID'];
if ('markup' === $response_format) {
echo walk_nav_menu_tree(array_map('wp_setup_nav_menu_item', array(get_term($object_id, $object_type))), 0, (object) $args);
} elseif ('json' === $response_format) {
$post_obj = get_term($object_id, $object_type);
echo wp_json_encode(array('ID' => $object_id, 'post_title' => $post_obj->name, 'post_type' => $object_type));
echo "\n";
}
}
}
} elseif (preg_match('/quick-search-(posttype|taxonomy)-([a-zA-Z_-]*\b)/', $type, $matches)) {
if ('posttype' === $matches[1] && get_post_type_object($matches[2])) {
$post_type_obj = _wp_nav_menu_meta_box_object(get_post_type_object($matches[2]));
$args = array_merge($args, array('no_found_rows' => true, 'update_post_meta_cache' => false, 'update_post_term_cache' => false, 'posts_per_page' => 10, 'post_type' => $matches[2], 's' => $query));
if (isset($post_type_obj->_default_query)) {
$args = array_merge($args, (array) $post_type_obj->_default_query);
}
$search_results_query = new WP_Query($args);
if (!$search_results_query->have_posts()) {
return;
}
while ($search_results_query->have_posts()) {
$post = $search_results_query->next_post();
if ('markup' === $response_format) {
$var_by_ref = $post->ID;
echo walk_nav_menu_tree(array_map('wp_setup_nav_menu_item', array(get_post($var_by_ref))), 0, (object) $args);
} elseif ('json' === $response_format) {
echo wp_json_encode(array('ID' => $post->ID, 'post_title' => get_the_title($post->ID), 'post_type' => $matches[2]));
echo "\n";
}
}
} elseif ('taxonomy' === $matches[1]) {
$terms = get_terms(array('taxonomy' => $matches[2], 'name__like' => $query, 'number' => 10, 'hide_empty' => false));
if (empty($terms) || is_wp_error($terms)) {
return;
}
foreach ((array) $terms as $term) {
if ('markup' === $response_format) {
echo walk_nav_menu_tree(array_map('wp_setup_nav_menu_item', array($term)), 0, (object) $args);
} elseif ('json' === $response_format) {
echo wp_json_encode(array('ID' => $term->term_id, 'post_title' => $term->name, 'post_type' => $matches[2]));
echo "\n";
}
}
}
}
}