Php 具有DataTable服务器端处理的Wordpress自定义数据库表

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

我遵循并成功地创建了一个显示datatable with filter选项的短代码。此表适用于wordpress的本机post类型

我需要相同的datatable,但它应该从我添加的自定义数据库表中获取数据

自定义表格:

因此,我需要更改以下函数,以从上述自定义表中获取数据,而不是自定义post类型

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'). '&nbsp'. 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();
 
}