【发布时间】:2019-02-22 07:03:28
【问题描述】:
我正在制作一个插件来在DataTables 中显示所有用户信息,但我未能实现搜索、过滤和分页。我有大约 20k 个用户。请帮帮我。
可能我需要更改我的查询以加入 wp_users 和 wp_usermeta 并获得我的案例的结果。我发现了一个问题 here 和一个类似的 tutorial here 。我不擅长编写 MySQL 查询。请帮我解决一下这个。
我得到像
这样的 ajax 响应{
"draw": 1,
"recordsTotal": 1,
"recordsFiltered": 1,
"data": [
[
"example@mail.com",
"Some Name",
"",
"admin",
""
]
]
}
这是我的表结构
<table id="user_table" class="display table table-striped table-bordered dataTable" style="width:100%">
<thead class="user-table">
<tr>
<th>Email</th>
<th>Name </th>
<th>Url</th>
<th>nickname</th>
<th>description</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
我的脚本
jQuery(document).ready(function($){
$(window).on('load', function () {
setTimeout(loadtable, 200);
});
function loadtable(){
var ajaxurl = USERAjax.wpajaxusersearch;
var dataTable = $('#user_table').DataTable({
"processing":true,
"serverSide": true,
"order":[],
"pageLength": 10,
"ajax":{
url: ajaxurl,
type:"POST"
},
});
}
});
还添加了本地化脚本,如
function users_assets_scripts(){
wp_register_script( 'jquery_datatables_js', plugins_url( 'asset/js/datatables.min.js' , __FILE__ ), array(),null,true );
wp_enqueue_script( 'jquery_datatables_js' );
wp_register_style( 'jquery_datatables_css', plugins_url( 'asset/css/datatables.min.css' , __FILE__ ));
wp_enqueue_style( 'jquery_datatables_css' );
wp_localize_script( 'jquery', 'USERAjax', array('wpajaxusersearch' => admin_url( 'admin-ajax.php?action=wpajaxusersearch' )) );
}
add_action('wp_enqueue_scripts', 'users_assets_scripts');
还有我的 ajax 响应数据获取函数
<?php
function wpajaxusersearch(){
$request=$_REQUEST;
global $wpdb;
$sort= "user_registered";
//Build the custom database query to fetch all user IDs
$all_users_id = $wpdb->get_results("SELECT $wpdb->users.ID FROM $wpdb->users ORDER BY $sort ASC LIMIT ".$request['start'].",".$request['length']." " );
$totalData=$wpdb->num_rows;
$data=array();
foreach ( $all_users_id as $i_users_id ) {
$user = get_userdata( $i_users_id->ID);
$email =$user->user_email;
$user_fullname =$user->first_name . ' ' . $user->last_name;
$user_url =$user->user_url;
$user_nickname =$user->nickname;
$user_profile =$user->description;
$sub_array = array();
$sub_array[] = $email;
$sub_array[] = $user_fullname;
$sub_array[] = $user_url;
$sub_array[] = $user_nickname;
$sub_array[] = $user_profile;
$data[] = $sub_array;
}
$json_data=array(
"draw" => (isset($request["draw"]) ? $request["draw"] : 0),
"recordsTotal" => intval($totalData),
"recordsFiltered" => intval($totalData),
"data" => $data
);
echo json_encode($json_data);
wp_die(); //to remove that 0 response
}
add_action( 'wp_ajax_wpajaxusersearch', 'wpajaxusersearch' );
add_action( 'wp_ajax_nopriv_wpajaxusersearch', 'wpajaxusersearch' );
【问题讨论】:
-
为什么在这里使用 AJAX? DataTables 本身不会处理分页和搜索吗?
-
habdle 但它加载时间很慢并且加载所有数据或者我不知道?你能帮我吗?还是有更好的主意?但我需要实时过滤器
-
您的代码有什么问题?它只返回单个数据吗?
-
它只加载下拉选择的数据。但搜索和过滤不起作用
-
我看不懂,你能在这里分享你的网址吗?
标签: php mysql wordpress datatable