Make WordPress Core

Ticket #37782: 37782.6.diff

File 37782.6.diff, 8.0 KB (added by garrett-eclipse, 6 years ago)

Adding doc details to post_states functions

  • src/wp-admin/css/nav-menus.css

     
    409409        margin-top: -4px;
    410410}
    411411
     412.menu-item-title .post-state {
     413        font-weight: 600;
     414}
     415
    412416/* Nav Menu */
    413417#menu-container .inside {
    414418        padding-bottom: 10px;
  • src/wp-admin/includes/class-walker-nav-menu-checklist.php

     
    9393                        $title = $item->label;
    9494                } elseif ( isset( $item->post_type ) ) {
    9595                        /** This filter is documented in wp-includes/post-template.php */
    96                         $title = apply_filters( 'the_title', $item->post_title, $item->ID );
    97                         if ( ! empty( $item->front_or_home ) && _x( 'Home', 'nav menu home label' ) !== $title ) {
    98                                 /* translators: %s: front page title */
    99                                 $title = sprintf( _x( 'Home: %s', 'nav menu front page title' ), $title );
    100                         }
     96                        $title = apply_filters( 'the_title', $item->post_title, $item->ID );                   
    10197                }
    10298
    10399                $output .= isset( $title ) ? esc_html( $title ) : esc_html( $item->title );
     100
     101                if ( empty( $item->label ) && isset( $item->post_type ) && 'page' === $item->post_type ) {
     102                        /** Append post states */
     103                        $output .= _post_states( $item, false );
     104                }
     105
    104106                $output .= '</label>';
    105107
    106108                // Menu item hidden fields
  • src/wp-admin/includes/nav-menu.php

     
    354354                $args = array_merge( $args, (array) $box['args']->_default_query );
    355355        }
    356356
     357        /*
     358         * If we're dealing with pages, let's prioritize the front page,
     359         * posts page and privacy page at the top of the list.
     360         */
     361        $important_pages = array();
     362        if ( 'page' == $post_type_name ) {
     363                $suppress_page_ids = array();
     364
     365                $front_page                             = 'page' == get_option( 'show_on_front' ) ? (int) get_option( 'page_on_front' ) : 0;
     366                $posts_page                             = 'page' == get_option( 'show_on_front' ) ? (int) get_option( 'page_for_posts' ) : 0;
     367
     368                $privacy_policy_page_id                 = (int) get_option( 'wp_page_for_privacy_policy' );
     369                $privacy_policy_page_available  = false;
     370
     371                if ( ! empty( $privacy_policy_page_id ) ) {
     372                        $privacy_policy_page                    = get_post( $privacy_policy_page_id );
     373                        $privacy_policy_page_available  = ( $privacy_policy_page instanceof WP_Post && $privacy_policy_page->post_status === 'publish' );
     374                }
     375
     376                /*
     377                 * Insert Front Page or custom home link.
     378                 */
     379                $front_page_obj = null;
     380                if ( ! empty( $front_page ) ) {
     381                        $front_page_obj                 = get_post( $front_page );
     382                        $front_page_obj->front_or_home  = true;
     383
     384                        $suppress_page_ids[]                    = $front_page_obj->ID;
     385                } else {
     386                        $_nav_menu_placeholder  = ( 0 > $_nav_menu_placeholder ) ? intval( $_nav_menu_placeholder ) - 1 : -1;
     387                        $front_page_obj                 = (object) array(
     388                                'front_or_home' => true,
     389                                'ID'            => 0,
     390                                'object_id'     => $_nav_menu_placeholder,
     391                                'post_content'  => '',
     392                                'post_excerpt'  => '',
     393                                'post_parent'   => '',
     394                                'post_title'    => _x( 'Home', 'nav menu home label' ),
     395                                'post_type'     => 'nav_menu_item',
     396                                'type'          => 'custom',
     397                                'url'           => home_url( '/' ),
     398                        );
     399                }
     400                $important_pages[] = $front_page_obj;
     401
     402
     403                /*
     404                 * Insert Posts Page.
     405                 */
     406                if ( ! empty( $posts_page ) ) {
     407                        $posts_page_obj                         = get_post( $posts_page );
     408                        $posts_page_obj->posts_page = true;
     409
     410                        $important_pages[]                      = $posts_page_obj;
     411                        $suppress_page_ids[]            = $posts_page_obj->ID;
     412                }
     413
     414                /*
     415                 * Insert Privacy Page.
     416                 */
     417                if ( $privacy_policy_page_available ) {
     418                        $privacy_policy_page_obj                                = get_post( $privacy_policy_page_id );
     419                        $privacy_policy_page_obj->privacy_policy_page   = true;
     420
     421                        $important_pages[]                                                              = $privacy_policy_page_obj;
     422                        $suppress_page_ids[]                                                    = $privacy_policy_page_obj->ID;
     423                }
     424
     425                /*
     426                 * Add suppression array to arguments for WP_Query
     427                 */
     428                if ( ! empty( $suppress_page_ids ) ) {
     429                        $args['post__not_in'] = $suppress_page_ids;
     430                }
     431        }
     432
    357433        // @todo transient caching of these results with proper invalidation on updating of a post of this type
    358434        $get_posts = new WP_Query;
    359435        $posts     = $get_posts->query( $args );
     436
     437        /** Only suppress and insert when more than just important pages available */
    360438        if ( ! $get_posts->post_count ) {
    361                 echo '<p>' . __( 'No items.' ) . '</p>';
    362                 return;
     439                if ( ! empty( $important_pages ) ) {
     440                        unset($args['post__not_in']);
     441                        $get_posts = new WP_Query;
     442                        $posts     = $get_posts->query( $args );
     443                } else {
     444                        echo '<p>' . __( 'No items.' ) . '</p>';
     445                        return;
     446                }
     447        } else {
     448                if ( ! empty( $important_pages ) ) {
     449                        $posts = array_merge( $important_pages, $posts );
     450                }               
    363451        }
    364452
    365453        $num_pages = $get_posts->max_num_pages;
     
    520608                                <?php
    521609                                $args['walker'] = $walker;
    522610
    523                                 /*
    524                                  * If we're dealing with pages, let's put a checkbox for the front
    525                                  * page at the top of the list.
    526                                  */
    527                                 if ( 'page' == $post_type_name ) {
    528                                         $front_page = 'page' == get_option( 'show_on_front' ) ? (int) get_option( 'page_on_front' ) : 0;
    529                                         if ( ! empty( $front_page ) ) {
    530                                                 $front_page_obj                = get_post( $front_page );
    531                                                 $front_page_obj->front_or_home = true;
    532                                                 array_unshift( $posts, $front_page_obj );
    533                                         } else {
    534                                                 $_nav_menu_placeholder = ( 0 > $_nav_menu_placeholder ) ? intval( $_nav_menu_placeholder ) - 1 : -1;
    535                                                 array_unshift(
    536                                                         $posts,
    537                                                         (object) array(
    538                                                                 'front_or_home' => true,
    539                                                                 'ID'            => 0,
    540                                                                 'object_id'     => $_nav_menu_placeholder,
    541                                                                 'post_content'  => '',
    542                                                                 'post_excerpt'  => '',
    543                                                                 'post_parent'   => '',
    544                                                                 'post_title'    => _x( 'Home', 'nav menu home label' ),
    545                                                                 'post_type'     => 'nav_menu_item',
    546                                                                 'type'          => 'custom',
    547                                                                 'url'           => home_url( '/' ),
    548                                                         )
    549                                                 );
    550                                         }
    551                                 }
    552 
    553611                                $post_type = get_post_type_object( $post_type_name );
    554612
    555613                                if ( $post_type->has_archive ) {
  • src/wp-admin/includes/template.php

     
    18691869}
    18701870
    18711871/**
    1872  * @param WP_Post $post
     1872 * @param WP_Post $post The post to retrieve states from
     1873 * @param boolean $echo Flag to indicate if post states string should be returned or echo'd.
    18731874 */
    1874 function _post_states( $post ) {
     1875function _post_states( $post, $echo = true ) {
     1876        $post_states = get_post_states( $post );
     1877        $post_states_string = '';
     1878
     1879        if ( ! empty( $post_states ) ) {
     1880                $state_count = count( $post_states );
     1881                $i           = 0;
     1882                $post_states_string .= ' &mdash; ';
     1883                foreach ( $post_states as $state ) {
     1884                        ++$i;
     1885                        ( $i == $state_count ) ? $sep = '' : $sep = ', ';
     1886                        $post_states_string .= "<span class='post-state'>$state$sep</span>";
     1887                }
     1888        }
     1889
     1890        if ( $echo ) {
     1891                echo $post_states_string;
     1892        }
     1893        return $post_states_string;
     1894}
     1895
     1896/**
     1897 * @param WP_Post $post The post to retrieve states from
     1898 *
     1899 * @return array $post_states array of translated post states
     1900 *
     1901 * @since X.X.X
     1902 */
     1903function get_post_states( $post ) {
    18751904        $post_states = array();
    18761905        if ( isset( $_REQUEST['post_status'] ) ) {
    18771906                $post_status = $_REQUEST['post_status'];
     
    19281957         * @param string[] $post_states An array of post display states.
    19291958         * @param WP_Post  $post        The current post object.
    19301959         */
    1931         $post_states = apply_filters( 'display_post_states', $post_states, $post );
    1932 
    1933         if ( ! empty( $post_states ) ) {
    1934                 $state_count = count( $post_states );
    1935                 $i           = 0;
    1936                 echo ' &mdash; ';
    1937                 foreach ( $post_states as $state ) {
    1938                         ++$i;
    1939                         ( $i == $state_count ) ? $sep = '' : $sep = ', ';
    1940                         echo "<span class='post-state'>$state$sep</span>";
    1941                 }
    1942         }
    1943 
     1960        return apply_filters( 'display_post_states', $post_states, $post );
    19441961}
    19451962
    19461963/**