0

I have a custom page template and I found a a PHP snippet that create a pagination in html table. But the code is not working properly.

UPDATE: I change the code. But still the code is not working correctly, when I click on the 2nd page, the 2nd page displayed a blank page only.

if (isset($_POST['list_position']) && $_POST['list_position'] != 'Select by Position'){
    $list_position= $_POST['list_position'];
    $result_position= $wpdb->get_results($wpdb->prepare("SELECT DISTINCT id, submit_time, last_name, first_name, middle_name, mobile_number, email, location, position, message, attachment_resume_id FROM resume_databank WHERE position= '" . $list_position . "' ORDER BY position ASC", OBJECT));

$rows_per_page = 3;
$current = (intval(get_query_var('paged'))) ? intval(get_query_var('paged')) : 1;

global $wp_rewrite;

$pagination_args = array(
    'base' => @add_query_arg('paged','%#%'),
    'format' => '',
    'total' => ceil(sizeof($result_position)/$rows_per_page),
    'current' => $current,
    'show_all' => false,
    'type' => 'plain',
);

if( $wp_rewrite->using_permalinks())
    $pagination_args['base'] = user_trailingslashit(trailingslashit(remove_query_arg('s',get_pagenum_link(1))) . 'page/%#%/', 'paged');

if( !empty($wp_query->query_vars['s']))
    $pagination_args['add_args'] = array('s'=>get_query_var('s'));
    echo paginate_links($pagination_args);

$start = ($current - 1) * $rows_per_page;
$end = $start + $rows_per_page;
$end = (sizeof($result_position) < $end) ? sizeof($result_position) : $end;

    echo '<table id="paginate_result">';
        echo '<tr>';
        $optionId = 0;
        echo '<th>Submit Time</th>';
        echo '<th>Last Name</th>';
        echo '<th>First Name</th>';
        echo '<th>Middle Name</th>';
        echo '<th>Mobile Number</th>';
        echo '<th>Email</th>';
        echo '<th>Location</th>';
        echo '<th>Position</th>';
        echo '<th>Message</th>';
        echo '<th>Resume</th>';
        echo '<th>Processed?</th>';
        //foreach ($result_position as $record_s){
            for ($i=$start;$i < $end ;++$i ) {
            $row = $result_position[$i];
            $optionId++;
            echo '<tr>';
            echo '<td id="submit_time">' . $result_position[0]->submit_time . '</td>';
            echo '<td id="last_name">' . $result_position[0]->last_name . '</td>';
            echo '<td id="first_name">' . $result_position[0]->first_name . '</td>';
            echo '<td id="middle_name">' . $result_position[0]->middle_name . '</td>';
            echo '<td id="mobile_number">' . $result_position[0]->mobile_number . '</td>';
            echo '<td id="email">' . $result_position[0]->email . '</td>';
            echo '<td id="location">' . $result_position[0]->location . '</td>';
            echo '<td id="position">' . $result_position[0]->position . '</td>';
            echo '<td id="message">' . $result_position[0]->message . '</td>';
            echo '<td id="resumeFile'.$optionId.'"><a href=' . wp_get_attachment_url($result_position[0]->attachment_resume_id) . '>Download Resume</a></td>';
            echo '<td id="radioOption><label for="Yes">Yes</label>
                      <input type="radio" id="processedOptionYes'.$optionId.'" name="processedOption" value="Yes" onclick="proccessedCheck('.$optionId.',\'Yes\')"/>
                      <label for="No">No</label>
                      <input type="radio" id="processedOptionNo'.$optionId.'" name="processedOption" value="No" onclick="proccessedCheck('.$optionId.',\'No\')"/></td>';
            echo '</tr>';
        }
        echo '</table>';
2
  • Share your query with limit clause. Are you getting any error message when you access second page or empty result? If so, make sure you have result in the second page. Commented May 24, 2016 at 7:06
  • I dont get any error when I click on the 2nd page
    – User014019
    Commented May 24, 2016 at 7:12

1 Answer 1

1

You should get total and result array separately. Total is to create the page numbers and result array will give you limited data for each pages. Refer the below code.

if (isset($_POST['list_position']) && $_POST['list_position'] != 'Select by Position'){
    $list_position= $_POST['list_position'];
    $totalPosition= $wpdb->get_var("SELECT count(id) FROM resume_databank WHERE position= '" . $list_position . "' ORDER BY position ASC");
$rows_per_page = 3;
$current = (intval(get_query_var('paged'))) ? intval(get_query_var('paged')) : 1;

global $wp_rewrite;

$pagination_args = array(
    'base' => @add_query_arg('paged','%#%'),
    'format' => '',
    'total' => ceil(sizeof($totalPosition)/$rows_per_page),
    'current' => $current,
    'show_all' => false,
    'type' => 'plain',
);

if( $wp_rewrite->using_permalinks())
    $pagination_args['base'] = user_trailingslashit(trailingslashit(remove_query_arg('s',get_pagenum_link(1))) . 'page/%#%/', 'paged');

if( !empty($wp_query->query_vars['s']))
    $pagination_args['add_args'] = array('s'=>get_query_var('s'));
    echo paginate_links($pagination_args);

$start = ($current - 1) * $rows_per_page;
$end = $start + $rows_per_page;
$end = ($totalPosition < $end) ? $totalPosition : $end;
$result_position= $wpdb->get_results($wpdb->prepare("SELECT DISTINCT id, submit_time, last_name, first_name, middle_name, mobile_number, email, location, position, message, attachment_resume_id FROM resume_databank WHERE position= '" . $list_position . "' ORDER BY position ASC LIMIT $start,$end", OBJECT));

    echo '<table id="paginate_result">';
        echo '<tr>';
        $optionId = 0;
        echo '<th>Submit Time</th>';
        echo '<th>Last Name</th>';
        echo '<th>First Name</th>';
        echo '<th>Middle Name</th>';
        echo '<th>Mobile Number</th>';
        echo '<th>Email</th>';
        echo '<th>Location</th>';
        echo '<th>Position</th>';
        echo '<th>Message</th>';
        echo '<th>Resume</th>';
        echo '<th>Processed?</th>';
        //foreach ($result_position as $record_s){
            for ($i=$start;$i < $end ;++$i ) {
            $row = $result_position[$i];
            $optionId++;
            echo '<tr>';
            echo '<td id="submit_time">' . $result_position[0]->submit_time . '</td>';
            echo '<td id="last_name">' . $result_position[0]->last_name . '</td>';
            echo '<td id="first_name">' . $result_position[0]->first_name . '</td>';
            echo '<td id="middle_name">' . $result_position[0]->middle_name . '</td>';
            echo '<td id="mobile_number">' . $result_position[0]->mobile_number . '</td>';
            echo '<td id="email">' . $result_position[0]->email . '</td>';
            echo '<td id="location">' . $result_position[0]->location . '</td>';
            echo '<td id="position">' . $result_position[0]->position . '</td>';
            echo '<td id="message">' . $result_position[0]->message . '</td>';
            echo '<td id="resumeFile'.$optionId.'"><a href=' . wp_get_attachment_url($result_position[0]->attachment_resume_id) . '>Download Resume</a></td>';
            echo '<td id="radioOption><label for="Yes">Yes</label>
                      <input type="radio" id="processedOptionYes'.$optionId.'" name="processedOption" value="Yes" onclick="proccessedCheck('.$optionId.',\'Yes\')"/>
                      <label for="No">No</label>
                      <input type="radio" id="processedOptionNo'.$optionId.'" name="processedOption" value="No" onclick="proccessedCheck('.$optionId.',\'No\')"/></td>';
            echo '</tr>';
        }
        echo '</table>';
6
  • the pagination is not displayed when I try your code
    – User014019
    Commented May 25, 2016 at 5:43
  • Replace 'total' => ceil(sizeof($totalPosition)/$rows_per_page) with 'total' => ceil($totalPosition/$rows_per_page) and try. Commented May 25, 2016 at 5:47
  • still when i click the link to the 2nd page, i get a blank page only
    – User014019
    Commented May 25, 2016 at 5:49
  • Come for the chat here chat.stackexchange.com/rooms/40254/karthikeyani Commented May 25, 2016 at 5:58
  • im in the chat room now
    – User014019
    Commented May 25, 2016 at 6:03

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.