Php 具有DataTable服务器端处理的Wordpress自定义数据库表
我遵循并成功地创建了一个显示datatable with filter选项的短代码。此表适用于wordpress的本机post类型 我需要相同的datatable,但它应该从我添加的自定义数据库表中获取数据 自定义表格: 因此,我需要更改以下函数,以从上述自定义表中获取数据,而不是自定义post类型Php 具有DataTable服务器端处理的Wordpress自定义数据库表,php,mysql,wordpress,datatable,Php,Mysql,Wordpress,Datatable,我遵循并成功地创建了一个显示datatable with filter选项的短代码。此表适用于wordpress的本机post类型 我需要相同的datatable,但它应该从我添加的自定义数据库表中获取数据 自定义表格: 因此,我需要更改以下函数,以从上述自定义表中获取数据,而不是自定义post类型 function datatables_server_side_callback_subscriber_db() { header("Content-Type: applic
function datatables_server_side_callback_subscriber_db() {
header("Content-Type: application/json");
$request= $_GET;
$columns = array(
0 => 'post_title',
3 => LUBUVNA_PREFIX.'email',
1 => LUBUVNA_PREFIX.'first_name',
2 => LUBUVNA_PREFIX.'last_name',
4 => LUBUVNA_PREFIX.'phone'
);
$args = array(
'post_type' => 'lubuvna_subscriber',
'post_status' => 'publish',
'posts_per_page' => $request['length'],
'offset' => $request['start'],
'order' => $request['order'][0]['dir'],
);
if ($request['order'][0]['column'] == 0) {
$args['orderby'] = $columns[$request['order'][0]['column']];
} elseif ($request['order'][0]['column'] == 1 || $request['order'][0]['column'] == 2) {
$args['orderby'] = 'meta_value_num';
$args['meta_key'] = $columns[$request['order'][0]['column']];
}
//$request['search']['value'] <= Value from search
if( !empty($request['search']['value']) ) { // When datatables search is used
$args['meta_query'] = array(
'relation' => 'OR',
array(
'key' => 'd_title',
'value' => sanitize_text_field($request['search']['value']),
'compare' => 'LIKE'
),
array(
'key' => LUBUVNA_PREFIX.'email',
'value' => sanitize_text_field($request['search']['value']),
'compare' => 'LIKE'
),
array(
'key' => LUBUVNA_PREFIX.'first_name',
'value' => sanitize_text_field($request['search']['value']),
'compare' => 'LIKE'
),
array(
'key' => LUBUVNA_PREFIX.'last_name',
'value' => sanitize_text_field($request['search']['value']),
'compare' => 'LIKE'
),
array(
'key' => LUBUVNA_PREFIX.'phone',
'value' => sanitize_text_field($request['search']['value']),
'compare' => 'LIKE'
),
);
}
$subscriber_query = new WP_Query($args);
$totalData = $subscriber_query->found_posts;
if ( $subscriber_query->have_posts() ) {
while ( $subscriber_query->have_posts() ) {
$subscriber_query->the_post();
$nestedData = array();
$nestedData[] = get_field(LUBUVNA_PREFIX.'first_name'). ' '. get_field(LUBUVNA_PREFIX.'last_name');
$nestedData[] = "<a data-val='".get_post_field( 'post_name', get_post() )."' href='".get_permalink()."' data-posttype='".get_post_type( get_the_ID() )."' class='generallink'>" . get_field(LUBUVNA_PREFIX.'email') . "</a>";
$nestedData[] = get_field(LUBUVNA_PREFIX.'first_name');
$nestedData[] = get_field(LUBUVNA_PREFIX.'last_name');
$nestedData[] = get_field(LUBUVNA_PREFIX.'phone');
$data[] = $nestedData;
}
wp_reset_query();
$json_data = array(
"draw" => intval($request['draw']),
"recordsTotal" => intval($totalData),
"recordsFiltered" => intval($totalData),
"data" => $data
);
echo json_encode($json_data);
} else {
$json_data = array(
"data" => array()
);
echo json_encode($json_data);
}
wp_die();
}
函数datatables\u server\u side\u callback\u subscriber\u db(){
标题(“内容类型:application/json”);
$request=$\u GET;
$columns=数组(
0=>post_title',
3=>LUBUVNA_前缀“email”,
1=>LUBUVNA_前缀“名字”,
2=>LUBUVNA_前缀“姓氏”,
4=>LUBUVNA_前缀“电话”
);
$args=数组(
“post_type”=>“lubuvna_订户”,
“发布状态”=>“发布”,
“每页发布”=>$request['length'],
'offset'=>$request['start'],
'order'=>$request['order'][0]['dir'],
);
如果($request['order'][0]['column']==0){
$args['orderby']=$columns[$request['order'][0]['column'];
}elseif($request['order'][0]['column']==1 | |$request['order'][0]['column']==2){
$args['orderby']='meta_value_num';
$args['meta_key']=$columns[$request['order'][0]['column']];
}
//$request['search']['value']'或'',
排列(
'key'=>'d_title',
'value'=>sanitize_text_字段($request['search']['value']),
'比较'=>'类似'
),
排列(
'key'=>LUBUVNA_前缀'email',
'value'=>sanitize_text_字段($request['search']['value']),
'比较'=>'类似'
),
排列(
'key'=>LUBUVNA_前缀。'first_name',
'value'=>sanitize_text_字段($request['search']['value']),
'比较'=>'类似'
),
排列(
'key'=>LUBUVNA_前缀。'last_name',
'value'=>sanitize_text_字段($request['search']['value']),
'比较'=>'类似'
),
排列(
'key'=>LUBUVNA_前缀'phone',
'value'=>sanitize_text_字段($request['search']['value']),
'比较'=>'类似'
),
);
}
$subscriber\u query=新的WP\u查询($args);
$totalData=$subscriber\u query->found\u posts;
如果($subscriber\u query->have\u posts()){
而($subscriber\u query->have\u posts()){
$subscriber_query->the_post();
$nestedData=array();
$nestedData[]=get_字段(LUBUVNA_前缀“first_name”)。.nbsp.get_字段(LUBUVNA_前缀“last_name”);
$nestedData[]=“”;
$nestedData[]=get_字段(LUBUVNA_前缀“first_name”);
$nestedData[]=get_字段(LUBUVNA_前缀“last_name”);
$nestedData[]=get_字段(LUBUVNA_前缀“phone”);
$data[]=$nestedData;
}
wp_reset_query();
$json_data=array(
“draw”=>intval($request['draw']),
“recordsTotal”=>intval($totalData),
“recordsFiltered”=>intval($totalData),
“数据”=>$data
);
echo json_编码($json_数据);
}否则{
$json_data=array(
“数据”=>数组()
);
echo json_编码($json_数据);
}
wp_die();
}
所以我将在这里发布这篇文章,以防其他人正在寻找相同的解决方案。我必须添加global$wpdb
,并从自定义数据库表中获取数据。它与分页/排序/搜索完美结合
function datatables_server_side_callback_subscriber_db() {
header("Content-Type: application/json");
global $wpdb;
// Table name
$table_name = $wpdb->prefix . "lubuvna_subscribers";
// Request
$request= $_GET;
// Columns
$columns = array(
0 => 'ID',
1 => 'first_name',
2 => 'last_name',
3 => 'email',
4 => 'phone'
);
// Datatable Filters
$column = $columns[$request['order'][0]['column']];
$offset = $request['start'];
$length = $request['length'];
$order = $request['order'][0]['dir'];
// Search all columns
$sql_where = "";
if ( !empty($request['search']['value']) ) {
$sql_where .= "WHERE ";
foreach ($columns as $column) {
$sql_where .= $column . " LIKE '%" . sanitize_text_field($request['search']['value']) . "%' OR ";
}
$sql_where = substr($sql_where, 0, -3);
}
// Total Records in the datatable
$total_table_records = "SELECT count(*) as count FROM {$table_name}";
$total_fetched_records = $wpdb->get_results($total_table_records, OBJECT);
$total_records = $total_fetched_records[0]->count;
// Total Records Search
$total_table_records_search = "SELECT count(*) as count FROM $table_name $sql_where";
$total_fetched_records_search = $wpdb->get_results($total_table_records_search, OBJECT);
$total_records_search = $total_fetched_records_search[0]->count;
// Query
$total_results = $wpdb->get_results( "SELECT * FROM $table_name $sql_where ORDER BY $column $order LIMIT $offset, $length" );
if ( !empty($total_results) ) {
foreach ($total_results as $row){
$nestedData = array();
$nestedData[] = $row->ID;
$nestedData[] = $row->first_name;
$nestedData[] = $row->last_name;
$nestedData[] = $row->email;
$nestedData[] = $row->phone;
$data[] = $nestedData;
}
$json_data = array(
"draw" => intval($request['draw']),
"recordsTotal" => intval($total_records),
"recordsFiltered" => intval($total_records_search),
"data" => $data
);
echo json_encode($json_data);
} else {
$json_data = array(
"data" => array()
);
echo json_encode($json_data);
}
wp_die();
}