WordPress Version: 6.3
/**
* Handles searching plugins via AJAX.
*
* @since 4.6.0
*
* @global string $s Search term.
*/
function wp_ajax_search_plugins()
{
check_ajax_referer('updates');
// Ensure after_plugin_row_{$plugin_file} gets hooked.
wp_plugin_update_rows();
$pagenow = isset($_POST['pagenow']) ? sanitize_key($_POST['pagenow']) : '';
if ('plugins-network' === $pagenow || 'plugins' === $pagenow) {
set_current_screen($pagenow);
}
/** @var WP_Plugins_List_Table $wp_list_table */
$wp_list_table = _get_list_table('WP_Plugins_List_Table', array('screen' => get_current_screen()));
$status = array();
if (!$wp_list_table->ajax_user_can()) {
$status['errorMessage'] = __('Sorry, you are not allowed to manage plugins for this site.');
wp_send_json_error($status);
}
// Set the correct requester, so pagination works.
$_SERVER['REQUEST_URI'] = add_query_arg(array_diff_key($_POST, array('_ajax_nonce' => null, 'action' => null)), network_admin_url('plugins.php', 'relative'));
$GLOBALS['s'] = wp_unslash($_POST['s']);
$wp_list_table->prepare_items();
ob_start();
$wp_list_table->display();
$status['count'] = count($wp_list_table->items);
$status['items'] = ob_get_clean();
wp_send_json_success($status);
}