WordPress.org

Make WordPress Core

Ticket #6561: edit-pages-paged.patch

File edit-pages-paged.patch, 4.4 KB (added by ramenboy, 6 years ago)

Add paging to manage pages on WordPress 2.5

  • edit-pages.php

     
    5151        $post_status_q .= '&perm=readable'; 
    5252} 
    5353 
    54 $query_str = "post_type=page&orderby=menu_order title&what_to_show=posts$post_status_q&posts_per_page=-1&posts_per_archive_page=-1&order=asc"; 
     54if ( !isset($_GET['post_status']) ) { 
     55    $_GET['post_status'] = null; 
     56} 
    5557 
    56 $query_str = apply_filters('manage_pages_query', $query_str); 
    57 wp($query_str); 
     58if (isset($_GET['page_id'])) { 
     59    $query_str = "post_type=page&orderby=menu_order title&what_to_show=posts$post_status_q&posts_per_page=-1&posts_per_archive_page=-1&order=asc"; 
    5860 
     61    $query_str = apply_filters('manage_pages_query', $query_str); 
     62    wp($query_str); 
     63} else { 
     64    $paged = isset($_GET['paged']) ? intval($_GET['paged']) : 1; 
     65    $paged_size = 30; 
     66 
     67    $where = "post_type = 'page'"; 
     68    if (isset($_GET['s'])) { 
     69        $where .= " AND post_title LIKE '%" . $wpdb->escape($_GET['s']) . "%'"; 
     70        $paged = 0; 
     71    } 
     72    if (isset($_GET['post_status'])) { 
     73        $where .= " AND post_status = '" . $wpdb->escape($_GET['post_status']) . "'"; 
     74        if ($_GET['post_status'] != 'publish') $paged = 0; 
     75    } 
     76    if (isset($_GET['author'])) { 
     77        $where .= " AND post_author = " . $wpdb->escape($_GET['author']); 
     78        $paged = 0; 
     79    } 
     80 
     81    $total_pages = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE $where"); 
     82 
     83    $sql = "SELECT ID, post_parent, post_date, post_date_gmt, post_modified, post_modified_gmt, post_author, '' AS post_content, post_name, post_status, post_title, post_type FROM $wpdb->posts WHERE $where ORDER BY menu_order, post_title"; 
     84 
     85    $all_pages = $wpdb->get_results($sql); 
     86 
     87    if ($paged) { 
     88        $all_pages_by_id = array(); 
     89        $page_children = array(); 
     90 
     91        foreach ($all_pages as $page) { 
     92            $all_pages_by_id[$page->ID] = $page; 
     93            $page_children[$page->post_parent][] = $page; 
     94        } 
     95 
     96        function build_page_tree($parent_id) { 
     97            global $page_children; 
     98            $tree = array(); 
     99            if (isset($page_children[$parent_id])) { 
     100                foreach ($page_children[$parent_id] as $child) { 
     101                    $child->children = build_page_tree($child->ID); 
     102                    $tree[] = $child; 
     103                } 
     104            } 
     105            return $tree; 
     106        } 
     107 
     108        function build_page_array($tree) { 
     109            $array = array(); 
     110            foreach ($tree as $page) { 
     111                $array[] = $page; 
     112                $array = array_merge($array, build_page_array($page->children)); 
     113            } 
     114            return $array; 
     115        } 
     116 
     117        $page_tree = build_page_tree(0); 
     118        $page_array = build_page_array($page_tree); 
     119        $posts = array_slice($page_array, ($paged - 1) * $paged_size, $paged_size); 
     120 
     121        if ($posts) { 
     122            while ($posts[0]->post_parent) { 
     123                $parent = $all_pages_by_id[$posts[0]->post_parent]; 
     124                $parent->post_title .= ' (continued)'; 
     125                $posts = array_merge(array($parent), $posts); 
     126            } 
     127        } 
     128    } else { 
     129        $posts = $all_pages; 
     130    } 
     131} 
     132 
    59133if ( is_singular() ) 
    60134        wp_enqueue_script( 'admin-comments' ); 
    61135require_once('admin-header.php'); 
     
    111185?> 
    112186 
    113187<p id="post-search"> 
    114         <input type="text" id="post-search-input" name="s" value="<?php echo attribute_escape(stripslashes($_GET['s'])); ?>" /> 
     188        <input type="text" id="post-search-input" name="s" value="<?php echo attribute_escape(stripslashes(isset($_GET['s']) ? $_GET['s'] : '')); ?>" /> 
    115189        <input type="submit" value="<?php _e( 'Search Pages' ); ?>" class="button" /> 
    116190</p> 
    117191 
    118192<div class="tablenav"> 
    119193 
     194<?php 
     195$page_links = null; 
     196if ($paged) { 
     197    $page_links = paginate_links( array( 
     198        'base' => add_query_arg( 'paged', '%#%' ), 
     199        'format' => '', 
     200        'total' => $total_pages / $paged_size + 1, 
     201        'current' => $paged 
     202    )); 
     203} 
     204if ( $page_links ) 
     205    echo "<div class='tablenav-pages'>$page_links</div>"; 
     206?> 
     207 
    120208<div class="alignleft"> 
    121209<input type="submit" value="<?php _e('Delete'); ?>" name="deleteit" class="button-secondary delete" /> 
    122210<?php wp_nonce_field('bulk-pages'); ?> 
     
    168256?> 
    169257 
    170258<div class="tablenav"> 
     259 
     260<?php 
     261if ( $page_links ) 
     262        echo "<div class='tablenav-pages'>$page_links</div>"; 
     263?> 
     264 
    171265<br class="clear" /> 
    172266</div> 
    173267 
     268<br class="clear" /> 
     269 
    174270<?php 
    175271 
    176272if ( 1 == count($posts) && is_singular() ) :