WordPress.org

Make WordPress Core

Ticket #21665: 21665-v1.diff

File 21665-v1.diff, 4.7 KB (added by bootsz, 20 months ago)

Adds filtering for System pages to the Pages table, and adds support for classifying & storing system pages in the database via wp_options.

  • wp-admin/includes/class-wp-posts-list-table.php

     
    4545         */ 
    4646        var $sticky_posts_count = 0; 
    4747 
     48        /** 
     49         * Holds the number of pages designated as System Pages. 
     50         * 
     51         * @since 3.5.0 
     52         * @var int 
     53         * @access private 
     54         */ 
     55        var $system_pages_count = 0; 
     56 
    4857        function __construct() { 
    4958                global $post_type_object, $wpdb; 
    5059 
     
    6776                        $this->sticky_posts_count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT( 1 ) FROM $wpdb->posts WHERE post_type = %s AND post_status != 'trash' AND ID IN ($sticky_posts)", $post_type ) ); 
    6877                } 
    6978 
     79                if ( 'page' == $post_type && $system_pages = get_option( 'system_pages' ) ) { 
     80                        $system_pages = implode( ', ', array_map( 'absint', (array) $system_pages ) ); 
     81                        $this->system_pages_count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT( 1 ) FROM $wpdb->posts WHERE post_type = %s AND post_status != 'trash' AND ID IN ($system_pages)", $post_type ) ); 
     82                } 
     83 
    7084                parent::__construct( array( 
    7185                        'plural' => 'posts', 
    7286                ) ); 
     
    178192                        $status_links = array_merge( array_slice( $status_links, 0, $split ), $sticky_link, array_slice( $status_links, $split ) ); 
    179193                } 
    180194 
     195                if ( ! empty( $this->system_pages_count ) ) { 
     196                        $class = ! empty( $_REQUEST['show_system'] ) ? ' class="current"' : ''; 
     197 
     198                        $system_link = array( 'system' => "<a href='edit.php?post_type=$post_type&amp;show_system=1'$class>" . sprintf( _nx( 'System <span class="count">(%s)</span>', 'System <span class="count">(%s)</span>', $this->system_pages_count, 'posts' ), number_format_i18n( $this->system_pages_count ) ) . '</a>' ); 
     199 
     200                        $split = 1 + array_search( ( isset( $status_links['publish'] ) ? 'publish' : 'all' ), array_keys( $status_links ) ); 
     201                        $status_links = array_merge( array_slice( $status_links, 0, $split ), $system_link, array_slice( $status_links, $split ) ); 
     202                } 
     203 
    181204                return $status_links; 
    182205        } 
    183206 
  • wp-admin/includes/post.php

     
    887887        if ( ! empty( $q['show_sticky'] ) ) 
    888888                $query['post__in'] = (array) get_option( 'sticky_posts' ); 
    889889 
     890        if ( ! empty( $q['show_system'] ) ) 
     891                $query['post__in'] = (array) get_option( 'system_pages' ); 
     892 
    890893        wp( $query ); 
    891894 
    892895        return $avail_post_stati; 
  • wp-admin/options-reading.php

     
    9090        if ( 'page' == get_option( 'show_on_front' ) && ! get_option( 'page_on_front' ) && ! get_option( 'page_for_posts' ) ) 
    9191                update_option( 'show_on_front', 'posts' ); 
    9292?> 
     93 
     94<?php 
     95        if ( get_option('page_for_posts') != '0' ) : 
     96 
     97                make_system_page( get_option('page_for_posts') ); 
     98 
     99                if ( get_option('page_for_posts') != get_option('page_for_posts_last') ) : 
     100                        undo_system_page( get_option('page_for_posts_last') ); 
     101                endif; 
     102                 
     103                update_option('page_for_posts_last', get_option('page_for_posts') ); 
     104 
     105        else: 
     106                undo_system_page( get_option('page_for_posts_last') ); 
     107                update_option('page_for_posts_last', '0'); 
     108 
     109        endif; 
     110?> 
     111 
    93112<table class="form-table"> 
    94113<tr valign="top"> 
    95114<th scope="row"><?php _e( 'Front page displays' ); ?></th> 
  • wp-includes/post.php

     
    19461946} 
    19471947 
    19481948/** 
     1949 * Classify a page as a System Page. 
     1950 * 
     1951 * @since 3.5.0 
     1952 * 
     1953 * @param int $post_id Post ID. 
     1954 */ 
     1955function make_system_page($post_id) { 
     1956        $system_pages = get_option('system_pages'); 
     1957        $post_id = (int) $post_id; 
     1958 
     1959        if ( !is_array($system_pages) ) 
     1960                $system_pages = array($post_id); 
     1961 
     1962        if ( ! in_array($post_id, $system_pages) ) 
     1963                $system_pages[] = $post_id; 
     1964 
     1965        update_option('system_pages', $system_pages); 
     1966} 
     1967 
     1968/** 
     1969 * De-Classify a page as a System Page. 
     1970 * 
     1971 * @since 3.5.0 
     1972 * 
     1973 * @param int $post_id Post ID. 
     1974 */ 
     1975function undo_system_page($post_id) { 
     1976        $system_pages = get_option('system_pages'); 
     1977        $post_id = (int) $post_id; 
     1978 
     1979        if ( !is_array($system_pages) ) 
     1980                return; 
     1981 
     1982        if ( ! in_array($post_id, $system_pages) ) 
     1983                return; 
     1984 
     1985        $offset = array_search($post_id, $system_pages); 
     1986        if ( false === $offset ) 
     1987                return; 
     1988 
     1989        array_splice($system_pages, $offset, 1); 
     1990 
     1991        update_option('system_pages', $system_pages); 
     1992} 
     1993 
     1994/** 
    19491995 * Count number of posts of a post type and is user has permissions to view. 
    19501996 * 
    19511997 * This function provides an efficient method of finding the amount of post's