WordPress.org

Make WordPress Core

Ticket #21665: 21665-v1.diff

File 21665-v1.diff, 4.7 KB (added by bootsz, 6 years 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