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/**