Make WordPress Core


Ignore:
Timestamp:
12/14/2018 09:38:09 AM (8 years ago)
Author:
atimmer
Message:

Meta boxes: Don't assume that callback args are an array.

While the documentation for add_meta_box() specifices that $callback_args should be an array, this has never been enforced, and we have workarounds in place for when it's passed as something other than an array.

Rather than break sites that are passing unexpected data, we can quietly just allow for it, instead.

Props johnjamesjacoby, birgire, pento.
Merges [43838] to trunk.
Fixes #45206.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/wp-admin/includes/template.php

    r44170 r44174  
    11381138                                        }
    11391139
    1140                                         // Don't show boxes in the block editor, if they're just here for back compat.
    1141                                         if ( $screen->is_block_editor() && isset( $box['args']['__back_compat_meta_box'] ) && $box['args']['__back_compat_meta_box'] ) {
    1142                                                 continue;
    1143                                         }
    1144 
    1145                                         // Don't show boxes in the block editor that aren't compatible with the block editor.
    1146                                         if ( $screen->is_block_editor() && isset( $box['args']['__block_editor_compatible_meta_box'] ) && ! $box['args']['__block_editor_compatible_meta_box'] ) {
    1147                                                 continue;
    1148                                         }
    1149 
    1150                                         $block_compatible = true;
    1151                                         if ( isset( $box['args']['__block_editor_compatible_meta_box'] ) ) {
    1152                                                 $block_compatible = (bool) $box['args']['__block_editor_compatible_meta_box'];
    1153                                                 unset( $box['args']['__block_editor_compatible_meta_box'] );
    1154                                         }
    1155 
    1156                                         if ( isset( $box['args']['__back_compat_meta_box'] ) ) {
    1157                                                 $block_compatible |= (bool) $box['args']['__back_compat_meta_box'];
    1158                                                 unset( $box['args']['__back_compat_meta_box'] );
     1140                                        if ( is_array( $box[ 'args' ] ) ) {
     1141                                                // If a meta box is just here for back compat, don't show it in the block editor.
     1142                                                if ( $screen->is_block_editor() && isset( $box['args']['__back_compat_meta_box'] ) && $box['args']['__back_compat_meta_box'] ) {
     1143                                                        continue;
     1144                                                }
     1145
     1146                                                // If a meta box doesn't work in the block editor, don't show it in the block editor.
     1147                                                if ( $screen->is_block_editor() && isset( $box['args']['__block_editor_compatible_meta_box'] ) && ! $box['args']['__block_editor_compatible_meta_box'] ) {
     1148                                                        continue;
     1149                                                }
     1150
     1151                                                $block_compatible = true;
     1152                                                if ( isset( $box['args']['__block_editor_compatible_meta_box'] ) ) {
     1153                                                        $block_compatible = (bool) $box['args']['__block_editor_compatible_meta_box'];
     1154                                                        unset( $box['args']['__block_editor_compatible_meta_box'] );
     1155                                                }
     1156
     1157                                                if ( isset( $box['args']['__back_compat_meta_box'] ) ) {
     1158                                                        $block_compatible = $block_compatible || (bool) $box['args']['__back_compat_meta_box'];
     1159                                                        unset( $box['args']['__back_compat_meta_box'] );
     1160                                                }
    11591161                                        }
    11601162
Note: See TracChangeset for help on using the changeset viewer.