数据服务器端wordpress集成

时间:2013-01-10 01:33:10

标签: wordpress datatables server-side

因此,我继承了一个基于数据表的内部网站点。基本上它是在Wordpress中制作的,然后显示用户在数据表中填写的自定义字段。但是,当每个帖子超过2k条目查询40列时,当用户尝试查看表格中的数据时,现在正在停滞不前。

我正在尝试利用Datatables的服务器端方面,但由于sql数据的格式化方式而遇到一点麻烦。

任何人都可以提供有关如何设置server_processing.php文件(我正在使用此文件:http://datatables.net/development/server-side/php_mysql)的任何帮助:

  1. 根据wp_posts.ID索引显示行
  2. 根据不同的表(wp_postmeta)显示此行中的列,其中每个列值在wp_postmeta表中通过1中找到的ID单独编制索引
  3. 将整行链接到wp_posts表中找到的网址
  4. 如果有人有任何想法,我会非常感激...

4 个答案:

答案 0 :(得分:1)

绝对是WordPress的插件是最有效的。 AJAX可以与使用WordPress编辑功能等核心的JQuery冲突/导致问题。我会去WordPress.org并在插件下查找帮助。还有付费/高级内联网插件,如简单内联网。 :) 克里斯

答案 1 :(得分:0)

可能您可能对此插件感兴趣 - 看起来它正是您正在寻找的内容:http://wpdatatables.com

服务器端处理的示例:http://wpdatatables.com/display-mysql-table-in-wordpress/

答案 2 :(得分:0)

你肯定需要一个包装DataTables功能的Wordpress表插件。您可以考虑Tabulizer for Wordpress(http://www.tabulizer.com)支持服务器端处理,并仅在需要时通过Ajax调用加载表数据。还有一个数据源缓存可以提高性能。

答案 3 :(得分:0)

WordPress或Core PHP中的Ajax dataTable或服务器端处理dataTable。

  

HTML代码

<table id="student_table" width="100%">
    <thead>
        <tr>
            <th>Roll No.</th>
            <th>Full Name</th>
            <th>Phone</th>
            <th>Action</th>
        </tr>
    </thead>
    <tbody>

    </tbody>
    <tfoot>
        <tr>
            <th>Roll No.</th>
            <th>Full Name</th>
            <th>Phone</th>
            <th>Action</th>
        </tr>
    </tfoot>
</table>
  

jQuery代码

jQuery('#student_table').DataTable({
    "bProcessing": true,
    "serverSide": true,
    "ajax":{
        "url": FrontendConfig.ajaxurl+'?action=getStudentsFromExamIdAjax&exam_nounce=exam_nounce_data&exam_id=1',
        type: "post",
    }
});  
  

WordPress或PHP代码

add_action('wp_ajax_getStudentsFromExamIdAjax', 'getStudentsFromExamIdAjax' );
add_action('wp_ajax_nopriv_getStudentsFromExamIdAjax', 'getStudentsFromExamIdAjax' );

function getStudentsFromExamIdAjax(){
    if(empty($_GET['action']) || empty($_GET['exam_id'])){
        wp_send_json_error( new \WP_Error( 'Bad Request' ) );
    }

    if(isset($_GET['exam_id']) && $_SERVER['REQUEST_METHOD'] === 'POST' && wp_verify_nonce( $_GET['exam_nounce'], 'exam_nounce_data' )):

        $exam_id = (isset($_GET['exam_id'])) ? absint($_GET['exam_id']) : '';

        /*@ You can create a function to get the data here */
        $students = getStudentsFromExamId($exam_id);

        $tdata = [];
        foreach ($students as $key => $value):
            $tdata[$key][] = $value->roll_no;
            $tdata[$key][] = $value->name;
            $tdata[$key][] = $value->phone;
            $tdata[$key][] = 'action here';
        endforeach;

        $total_records = count($tdata);

        $json_data = array(

            /* $_REQUEST['draw'] comes from the datatable, you can print to ensure that */

            "draw"            => intval( $_REQUEST['draw'] ), 
            "recordsTotal"    => intval( $total_records ),
            "recordsFiltered" => intval( $total_records  ),
            "data"            => $tdata
        );

        echo json_encode($json_data);
    endif;

    wp_die();
}