WordPress.org

Make WordPress Core

Ticket #23450: 23450.14.diff

File 23450.14.diff, 7.0 KB (added by DrewAPicture, 5 years ago)

DRY-er approach

  • wp-admin/includes/template.php

     
    874874 * 
    875875 * @since 2.5.0 
    876876 * 
    877  * @param string|object $screen Screen identifier 
    878  * @param string $context box context 
    879  * @param mixed $object gets passed to the box callback function as first parameter 
     877 * @param string|object $screen Screen identifier. 
     878 * @param string $context box context. 
     879 * @param mixed $object gets passed to the box callback function as first parameter. 
     880 * @param bool $accordion (optional) Whether to output meta boxes as accordion sections. 
    880881 * @return int number of meta_boxes 
    881882 */ 
    882 function do_meta_boxes( $screen, $context, $object ) { 
     883function do_meta_boxes( $screen, $context, $object, $accordion = false ) { 
    883884        global $wp_meta_boxes; 
    884885        static $already_sorted = false; 
    885886 
     
    892893 
    893894        $hidden = get_hidden_meta_boxes( $screen ); 
    894895 
    895         printf('<div id="%s-sortables" class="meta-box-sortables">', htmlspecialchars($context)); 
     896        $section_class = ! $accordion ? 'meta-box-sortables' : 'accordion-container'; 
    896897 
     898        printf('<div id="%1$s-sortables" class="%2$s">', htmlspecialchars( $context ), esc_attr( $section_class ) ); 
     899 
     900        if ( $accordion ) 
     901                echo '<ul class="outer-border">'; 
     902 
    897903        $i = 0; 
    898904        do { 
    899                 // Grab the ones the user has manually sorted. Pull them out of their previous context/priority and into the one the user chose 
    900                 if ( !$already_sorted && $sorted = get_user_option( "meta-box-order_$page" ) ) { 
    901                         foreach ( $sorted as $box_context => $ids ) { 
    902                                 foreach ( explode(',', $ids ) as $id ) { 
    903                                         if ( $id && 'dashboard_browser_nag' !== $id ) 
    904                                                 add_meta_box( $id, null, null, $screen, $box_context, 'sorted' ); 
     905                if ( ! $accordion ) { 
     906                        // Grab the ones the user has manually sorted. 
     907                        // Pull them out of their previous context/priority and into the one the user chose. 
     908                        if ( !$already_sorted && $sorted = get_user_option( "meta-box-order_$page" ) ) { 
     909                                foreach ( $sorted as $box_context => $ids ) { 
     910                                        foreach ( explode(',', $ids ) as $id ) { 
     911                                                if ( $id && 'dashboard_browser_nag' !== $id ) 
     912                                                        add_meta_box( $id, null, null, $screen, $box_context, 'sorted' ); 
     913                                        } 
    905914                                } 
    906915                        } 
    907                 } 
    908                 $already_sorted = true; 
     916                        $already_sorted = true; 
     917                }        
    909918 
    910                 if ( !isset($wp_meta_boxes) || !isset($wp_meta_boxes[$page]) || !isset($wp_meta_boxes[$page][$context]) ) 
     919                if ( ! isset( $wp_meta_boxes ) || ! isset( $wp_meta_boxes[$page] ) || ! isset( $wp_meta_boxes[$page][$context] ) ) 
    911920                        break; 
    912921 
    913                 foreach ( array('high', 'sorted', 'core', 'default', 'low') as $priority ) { 
     922                foreach ( array( 'high', 'sorted', 'core', 'default', 'low' ) as $priority ) { 
    914923                        if ( isset($wp_meta_boxes[$page][$context][$priority]) ) { 
    915924                                foreach ( (array) $wp_meta_boxes[$page][$context][$priority] as $box ) { 
    916925                                        if ( false == $box || ! $box['title'] ) 
    917926                                                continue; 
    918927                                        $i++; 
    919928                                        $hidden_class = in_array($box['id'], $hidden) ? ' hide-if-js' : ''; 
    920                                         echo '<div id="' . $box['id'] . '" class="postbox ' . postbox_classes($box['id'], $page) . $hidden_class . '" ' . '>' . "\n"; 
    921                                         if ( 'dashboard_browser_nag' != $box['id'] ) 
    922                                                 echo '<div class="handlediv" title="' . esc_attr__('Click to toggle') . '"><br /></div>'; 
    923                                         echo "<h3 class='hndle'><span>{$box['title']}</span></h3>\n"; 
    924                                         echo '<div class="inside">' . "\n"; 
    925                                         call_user_func($box['callback'], $object, $box); 
    926                                         echo "</div>\n"; 
    927                                         echo "</div>\n"; 
     929                                        if ( ! $accordion ) { 
     930                                                ?> 
     931                                                <div id="<?php echo esc_attr( $box['id'] ); ?>" class="postbox <?php echo postbox_classes( $box['id'], $page ) . $hidden_class; ?>"> 
     932                                                        <?php  
     933                                                        if ( 'dashboard_browser_nag' != $box['id'] ) 
     934                                                                echo '<div class="handlediv" title="' . esc_attr__('Click to toggle') . '"><br /></div>'; 
     935                                                        ?> 
     936                                                        <h3 class="hndle"><span><?php echo $box['title']; ?></span></h3> 
     937                                                        <div class="inside"> 
     938                                                                <?php call_user_func( $box['callback'], $object, $box ); ?> 
     939                                                        </div><!-- .hndle --> 
     940                                                </div><!-- .postbox --> 
     941                                        <?php } else { // Accordion output ?> 
     942                                                <li class="control-section accordion-section <?php echo $hidden_class; ?> <?php echo esc_attr( $box['id'] ); ?>" id="<?php echo esc_attr( $box['id'] ); ?>"> 
     943                                                        <h3 class="accordion-section-title hndle" tabindex="0" title="<?php echo esc_attr( $box['title'] ); ?>"><?php echo esc_html( $box['title'] ); ?></h3> 
     944                                                        <div class="accordion-section-content <?php postbox_classes( $box['id'], $page ); ?>"> 
     945                                                                <div class="inside"> 
     946                                                                        <?php call_user_func( $box['callback'], $object, $box ); ?> 
     947                                                                </div><!-- .inside --> 
     948                                                        </div><!-- .accordion-section-content --> 
     949                                                </li><!-- .accordion-section --> 
     950                                                <?php 
     951                                        } 
    928952                                } 
    929953                        } 
    930954                } 
    931955        } while(0); 
    932956 
    933         echo "</div>"; 
     957        if ( ! $accordion ) { 
     958                echo "</div><!-- .meta-box-sortables -->"; 
     959        } else { 
     960                echo '</ul><!-- .outer-border -->'; 
     961                echo '</div><!-- .accordion-container -->'; 
     962        } 
    934963 
    935964        return $i; 
    936965 
     
    9751004 * 
    9761005 * @since 3.6.0 
    9771006 * 
    978  * @uses global $wp_meta_boxes Used to retrieve registered meta boxes. 
     1007 * @uses do_meta_boxes() 
    9791008 * 
    9801009 * @param string|object $screen The screen identifier. 
    9811010 * @param string $context The meta box context. 
     
    9831012 * @return int number of meta boxes as accordion sections. 
    9841013 */ 
    9851014function do_accordion_sections( $screen, $context, $object ) { 
    986         global $wp_meta_boxes; 
    987  
    988         if ( empty( $screen ) ) 
    989                 $screen = get_current_screen(); 
    990         elseif ( is_string( $screen ) ) 
    991                 $screen = convert_to_screen( $screen ); 
    992  
    993         $page = $screen->id; 
    994  
    995         $hidden = get_hidden_meta_boxes( $screen ); 
    996         ?> 
    997         <div id="side-sortables" class="accordion-container"> 
    998                 <ul class="outer-border"> 
    999         <?php 
    1000         $i = 0; 
    1001         do { 
    1002                 if ( ! isset( $wp_meta_boxes ) || ! isset( $wp_meta_boxes[$page] ) || ! isset( $wp_meta_boxes[$page][$context] ) ) 
    1003                         break; 
    1004  
    1005                 foreach ( array( 'high', 'sorted', 'core', 'default', 'low' ) as $priority ) { 
    1006                         if ( isset( $wp_meta_boxes[$page][$context][$priority] ) ) { 
    1007                                 foreach ( $wp_meta_boxes[$page][$context][$priority] as $box ) { 
    1008                                         if ( false == $box || ! $box['title'] ) 
    1009                                                 continue; 
    1010                                         $i++; 
    1011                                         $hidden_class = in_array( $box['id'], $hidden ) ? 'hide-if-js' : ''; 
    1012                                         ?> 
    1013                                         <li class="control-section accordion-section <?php echo $hidden_class; ?> <?php echo esc_attr( $box['id'] ); ?>" id="<?php echo esc_attr( $box['id'] ); ?>"> 
    1014                                                 <h3 class="accordion-section-title hndle" tabindex="0" title="<?php echo esc_attr( $box['title'] ); ?>"><?php echo esc_html( $box['title'] ); ?></h3> 
    1015                                                 <div class="accordion-section-content <?php postbox_classes( $box['id'], $page ); ?>"> 
    1016                                                         <div class="inside"> 
    1017                                                                 <?php call_user_func( $box['callback'], $object, $box ); ?> 
    1018                                                         </div><!-- .inside --> 
    1019                                                 </div><!-- .accordion-section-content --> 
    1020                                         </li><!-- .accordion-section --> 
    1021                                         <?php 
    1022                                 } 
    1023                         } 
    1024                 } 
    1025         } while(0); 
    1026         ?> 
    1027                 </ul><!-- .outer-border --> 
    1028         </div><!-- .accordion-container --> 
    1029         <?php 
    1030         return $i; 
     1015        do_meta_boxes( $screen, 'side', $object, true ); 
    10311016} 
    10321017 
    10331018/**