You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为WordPress参会者列表PHP代码添加分页功能求助

解决WordPress参会者列表的分页问题

我来帮你搞定这个分页功能!你的现有代码只是放了静态的分页链接,但没有实际的分页逻辑支撑,所以点击分页按钮根本不会生效。咱们一步步把分页逻辑加上去:

第一步:添加分页参数与总条数查询

首先要定义每页显示的参会者数量,获取当前页码,还要先查询出该活动的总参会者数,这样才能算出总页数。

第二步:修改主查询,加入分页限制

在你的SQL查询里加上LIMIT和OFFSET,这样每次只查询当前页需要的内容。

第三步:动态生成分页链接

把原来的静态分页链接替换成动态生成的,要带上eventid和page参数,这样点击分页时才能正确传递参数。

完整修改后的代码

function ee_attendee_list($atts){
    global $wpdb, $post;
    
    // 分页参数配置
    $per_page = 10; // 每页显示10条,可根据需求调整
    $current_page = isset($_GET['page']) ? absint($_GET['page']) : 1;
    $offset = ($current_page - 1) * $per_page;
    
    $EVT_ID = $atts['eventid'];
    $post = get_post( $EVT_ID );
    
    // 先查询总参会者数量,用于计算总页数
    $total_sql = "SELECT COUNT(DISTINCT {$wpdb->prefix}esp_attendee_meta.ATT_ID)
                  FROM {$wpdb->prefix}esp_attendee_meta 
                  INNER JOIN {$wpdb->prefix}esp_registration 
                  ON {$wpdb->prefix}esp_attendee_meta.ATT_ID = {$wpdb->prefix}esp_registration.ATT_ID 
                  WHERE {$wpdb->prefix}esp_registration.EVT_ID = %d";
    $total_attendees = $wpdb->get_var( $wpdb->prepare( $total_sql, $post->ID ));
    $total_pages = ceil($total_attendees / $per_page);
    
    // 带分页的参会者查询
    $sql = "SELECT ATT_fname, ATT_lname, ATT_email, ATT_address, ATT_phone, STA_ID 
            FROM {$wpdb->prefix}esp_attendee_meta 
            INNER JOIN {$wpdb->prefix}esp_registration 
            ON {$wpdb->prefix}esp_attendee_meta.ATT_ID = {$wpdb->prefix}esp_registration.ATT_ID 
            WHERE {$wpdb->prefix}esp_registration.EVT_ID = %d
            LIMIT %d OFFSET %d";
    $attendees = $wpdb->get_results( $wpdb->prepare( $sql, $post->ID, $per_page, $offset ));
    
    // 注意:原代码里的$statename和$country变量未定义,这里先临时处理,后续需要补充关联查询
    // 如果需要获取州和国家名称,你可能需要关联对应的表,比如esp_state和esp_country
    
    echo '<table class="blueTable"> 
            <thead> 
                <tr> 
                    <th>Name</th> 
                    <th>Email</th> 
                    <th>Phone</th> 
                    <th>Address</th> 
                    <th>State</th> 
                    <th>Country</th> 
                </tr> 
            </thead> 
            <tfoot>
                <tr> 
                    <td colspan="6">';
    
    // 动态生成分页链接
    if ($total_pages > 1) {
        echo '<div class="links">';
        // 上一页
        if ($current_page > 1) {
            $prev_page = $current_page - 1;
            echo '<a href="?eventid=' . $EVT_ID . '&page=' . $prev_page . '">&laquo;</a> ';
        }
        
        // 页码链接
        for ($i = 1; $i <= $total_pages; $i++) {
            $active_class = ($i == $current_page) ? 'class="active"' : '';
            echo '<a ' . $active_class . ' href="?eventid=' . $EVT_ID . '&page=' . $i . '">' . $i . '</a> ';
        }
        
        // 下一页
        if ($current_page < $total_pages) {
            $next_page = $current_page + 1;
            echo '<a href="?eventid=' . $EVT_ID . '&page=' . $next_page . '">&raquo;</a>';
        }
        echo '</div>';
    }
    
    echo '          </td> 
                </tr> 
            </tfoot> 
            <tbody>';
    
    foreach($attendees as $attendee){
        $fname = $attendee->ATT_fname;
        $lname = $attendee->ATT_lname;
        $email = $attendee->ATT_email;
        $phone = empty($attendee->ATT_phone) ? "No Phone" : $attendee->ATT_phone;
        $address = empty($attendee->ATT_address) ? "No Address" : $attendee->ATT_address;
        $STA_ID = $attendee->STA_ID;
        
        // 这里暂时用STA_ID代替州名,如果你有州表,记得替换成对应的名称
        $statename = $STA_ID;
        $country = "待补充"; // 这里需要补充国家查询逻辑
        
        echo " <tr> 
                <td>$fname $lname</td> 
                <td>$email</td> 
                <td>$phone</td> 
                <td>$address</td> 
                <td>$statename</td> 
                <td>$country</td> 
            </tr> ";
    }
    
    echo "</tbody> 
        </table> ";
}

关键修改点说明:

  • 新增了分页参数:$per_page控制每页条数,$current_page获取当前页码,$offset计算偏移量
  • 添加了总参会者数查询,用来计算总页数$total_pages
  • 主查询加入了LIMIT %d OFFSET %d,通过wpdb->prepare安全传递参数
  • 动态生成了带eventid和page参数的分页链接,替换了原来的静态链接
  • 处理了上一页、下一页的边界情况,避免出现无效页码
  • 临时处理了原代码中未定义的$statename和$country变量,你需要根据实际数据库结构补充这部分的查询逻辑(比如关联州和国家的表)

内容的提问来源于stack exchange,提问作者Ramy Adel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:07:31