我有一个扩展WP\\u Table\\u List并呈现表的类。请参见events results
在prepare\\u items()函数中,我查询数据库
function prepare_items($race)
{
$columns = $this->get_columns();
$hidden = array();
$this->_column_headers = array($columns, $hidden, $this->get_sortable_columns());
$orderby = (!empty($_REQUEST[\'orderby\'])) ? $_REQUEST[\'orderby\'] : \'position+0\'; //If no sort, default to title
$order = (!empty($_REQUEST[\'order\'])) ? $_REQUEST[\'order\'] : \'asc\'; //If no order, default to asc
if($orderby!=\'position+0\')
$order .= \', position+0\';
global $wpdb;
$query = \'
SELECT wp_bhaa_raceresult.*,wp_users.display_name,
wp_users.user_nicename,gender.meta_value as gender,wp_posts.id as cid,wp_posts.post_title as cname
FROM \'.$wpdb->prefix .\'bhaa_raceresult
left join wp_users on wp_users.id=wp_bhaa_raceresult.runner
left join wp_usermeta gender on (gender.user_id=wp_users.id and gender.meta_key="bhaa_runner_gender")
left join wp_usermeta company on (company.user_id=wp_users.id and company.meta_key="bhaa_runner_company")
left join wp_posts on (wp_posts.post_type="house" and company.meta_value=wp_posts.id)
where race=\'.$race.\' and wp_bhaa_raceresult.class="RAN" ORDER BY \'.$orderby.\' \'. $order;
$querydata = $wpdb->get_results($query,ARRAY_A);
$this->items = $querydata;
}
我使用outputbuffer通过
function renderTable($race)
{
error_log("render table ".$race);
ob_start();
$this->prepare_items($race);
$this->display();
return ob_get_clean();
}
在我们最近的事件中,我们有500个结果,这似乎是输出缓冲区的内存问题。我想知道是否有更好的方法可以将表html代码刷新到缓冲区中,这样就不会导致内存不足问题。我的内存限制设置为
define(\'WP_MEMORY_LIMIT\', \'128M\');
完整的类代码可以在
https://github.com/emeraldjava/bhaawp/blob/master/table/raceresulttable.class.php
编辑
在构建表的每一行时,我添加了对memory\\u get\\u usage()的调用
function column_default( $item, $column_name ) {
error_log(\'column_default \'.$item[\'position\'].\' \'.memory_get_usage());
结果是
[24-Apr-2013 15:14:12 UTC] column_default 489 48477784
[24-Apr-2013 15:14:12 UTC] column_default 489 48477784
[24-Apr-2013 15:14:12 UTC] column_default 489 48477832
[24-Apr-2013 15:14:12 UTC] column_default 489 48477816
[24-Apr-2013 15:14:12 UTC] column_default 489 48477832
[24-Apr-2013 15:14:12 UTC] column_default 489 48477832
这表明我低于内存限制?
编辑2
我决定实现“display\\u rows()”方法,并在生成表的每一行后刷新html内容
function display_rows() {
parent::display_rows();
ob_flush();
}
这个解决方案允许生成整个表,但我无法用模板控制输出。