Changeset 8480 for sites/trunk/wordpress.org/public_html/wp-content/themes/pub/gutenberg/functions.php
- Timestamp:
- 03/20/2019 10:36:09 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/gutenberg/functions.php
r8479 r8480 20 20 return null; 21 21 } 22 } 23 24 /** 25 * This function was removed from the Gutenberg plugin in v5.3. 26 */ 27 if ( ! function_exists( 'gutenberg_editor_scripts_and_styles' ) ) { 28 /** 29 * Scripts & Styles. 30 * 31 * Enqueues the needed scripts and styles when visiting the top-level page of 32 * the Gutenberg editor. 33 * 34 * @since 0.1.0 35 * 36 * @param string $hook Screen name. 37 */ 38 function gutenberg_editor_scripts_and_styles( $hook ) { 39 global $wp_meta_boxes; 40 41 // Enqueue heartbeat separately as an "optional" dependency of the editor. 42 // Heartbeat is used for automatic nonce refreshing, but some hosts choose 43 // to disable it outright. 44 wp_enqueue_script( 'heartbeat' ); 45 46 wp_enqueue_script( 'wp-edit-post' ); 47 wp_enqueue_script( 'wp-format-library' ); 48 wp_enqueue_style( 'wp-format-library' ); 49 50 global $post; 51 52 // Set initial title to empty string for auto draft for duration of edit. 53 // Otherwise, title defaults to and displays as "Auto Draft". 54 $is_new_post = 'auto-draft' === $post->post_status; 55 56 // Set the post type name. 57 $post_type = get_post_type( $post ); 58 $post_type_object = get_post_type_object( $post_type ); 59 $rest_base = ! empty( $post_type_object->rest_base ) ? $post_type_object->rest_base : $post_type_object->name; 60 61 $preload_paths = array( 62 '/', 63 '/wp/v2/types?context=edit', 64 '/wp/v2/taxonomies?per_page=-1&context=edit', 65 '/wp/v2/themes?status=active', 66 sprintf( '/wp/v2/%s/%s?context=edit', $rest_base, $post->ID ), 67 sprintf( '/wp/v2/types/%s?context=edit', $post_type ), 68 sprintf( '/wp/v2/users/me?post_type=%s&context=edit', $post_type ), 69 array( '/wp/v2/media', 'OPTIONS' ), 70 array( '/wp/v2/blocks', 'OPTIONS' ), 71 ); 72 73 /** 74 * Preload common data by specifying an array of REST API paths that will be preloaded. 75 * 76 * Filters the array of paths that will be preloaded. 77 * 78 * @param array $preload_paths Array of paths to preload 79 * @param object $post The post resource data. 80 */ 81 $preload_paths = apply_filters( 'block_editor_preload_paths', $preload_paths, $post ); 82 83 // Ensure the global $post remains the same after 84 // API data is preloaded. Because API preloading 85 // can call the_content and other filters, callbacks 86 // can unexpectedly modify $post resulting in issues 87 // like https://github.com/WordPress/gutenberg/issues/7468. 88 $backup_global_post = $post; 89 90 $preload_data = array_reduce( 91 $preload_paths, 92 'rest_preload_api_request', 93 array() 94 ); 95 96 // Restore the global $post as it was before API preloading. 97 $post = $backup_global_post; 98 99 wp_add_inline_script( 100 'wp-api-fetch', 101 sprintf( 'wp.apiFetch.use( wp.apiFetch.createPreloadingMiddleware( %s ) );', wp_json_encode( $preload_data ) ), 102 'after' 103 ); 104 105 wp_add_inline_script( 106 'wp-blocks', 107 sprintf( 'wp.blocks.setCategories( %s );', wp_json_encode( get_block_categories( $post ) ) ), 108 'after' 109 ); 110 111 // Assign initial edits, if applicable. These are not initially assigned 112 // to the persisted post, but should be included in its save payload. 113 if ( $is_new_post ) { 114 // Override "(Auto Draft)" new post default title with empty string, 115 // or filtered value. 116 $initial_edits = array( 117 'title' => $post->post_title, 118 'content' => $post->post_content, 119 'excerpt' => $post->post_excerpt, 120 ); 121 } else { 122 $initial_edits = null; 123 } 124 125 // Preload server-registered block schemas. 126 wp_add_inline_script( 127 'wp-blocks', 128 'wp.blocks.unstable__bootstrapServerSideBlockDefinitions(' . json_encode( get_block_editor_server_block_settings() ) . ');' 129 ); 130 131 // Get admin url for handling meta boxes. 132 $meta_box_url = admin_url( 'post.php' ); 133 $meta_box_url = add_query_arg( 134 array( 135 'post' => $post->ID, 136 'action' => 'edit', 137 'meta-box-loader' => true, 138 '_wpnonce' => wp_create_nonce( 'meta-box-loader' ), 139 ), 140 $meta_box_url 141 ); 142 wp_localize_script( 'wp-editor', '_wpMetaBoxUrl', $meta_box_url ); 143 144 // Initialize the editor. 145 $align_wide = get_theme_support( 'align-wide' ); 146 $color_palette = current( (array) get_theme_support( 'editor-color-palette' ) ); 147 $font_sizes = current( (array) get_theme_support( 'editor-font-sizes' ) ); 148 149 /** 150 * Filters the allowed block types for the editor, defaulting to true (all 151 * block types supported). 152 * 153 * @param bool|array $allowed_block_types Array of block type slugs, or 154 * boolean to enable/disable all. 155 * @param object $post The post resource data. 156 */ 157 $allowed_block_types = apply_filters( 'allowed_block_types', true, $post ); 158 159 // Get all available templates for the post/page attributes meta-box. 160 // The "Default template" array element should only be added if the array is 161 // not empty so we do not trigger the template select element without any options 162 // besides the default value. 163 $available_templates = wp_get_theme()->get_page_templates( get_post( $post->ID ) ); 164 $available_templates = ! empty( $available_templates ) ? array_merge( 165 array( 166 '' => apply_filters( 'default_page_template_title', __( 'Default template', 'gutenberg' ), 'rest-api' ), 167 ), 168 $available_templates 169 ) : $available_templates; 170 171 // Media settings. 172 $max_upload_size = wp_max_upload_size(); 173 if ( ! $max_upload_size ) { 174 $max_upload_size = 0; 175 } 176 177 // Editor Styles. 178 global $editor_styles; 179 $styles = array( 180 array( 181 'css' => file_get_contents( 182 ABSPATH . WPINC . '/css/dist/editor/editor-styles.css' 183 ), 184 ), 185 ); 186 187 /* Translators: Use this to specify the CSS font family for the default font */ 188 $locale_font_family = esc_html_x( 'Noto Serif', 'CSS Font Family for Editor Font', 'gutenberg' ); 189 $styles[] = array( 190 'css' => "body { font-family: '$locale_font_family' }", 191 ); 192 193 if ( $editor_styles && current_theme_supports( 'editor-styles' ) ) { 194 foreach ( $editor_styles as $style ) { 195 if ( filter_var( $style, FILTER_VALIDATE_URL ) ) { 196 $styles[] = array( 197 'css' => file_get_contents( $style ), 198 ); 199 } else { 200 $file = get_theme_file_path( $style ); 201 if ( file_exists( $file ) ) { 202 $styles[] = array( 203 'css' => file_get_contents( $file ), 204 'baseURL' => get_theme_file_uri( $style ), 205 ); 206 } 207 } 208 } 209 } 210 211 // Lock settings. 212 $user_id = wp_check_post_lock( $post->ID ); 213 if ( $user_id ) { 214 /** 215 * Filters whether to show the post locked dialog. 216 * 217 * Returning a falsey value to the filter will short-circuit displaying the dialog. 218 * 219 * @since 3.6.0 220 * 221 * @param bool $display Whether to display the dialog. Default true. 222 * @param WP_Post $post Post object. 223 * @param WP_User|bool $user The user id currently editing the post. 224 */ 225 if ( apply_filters( 'show_post_locked_dialog', true, $post, $user_id ) ) { 226 $locked = true; 227 } else { 228 $locked = false; 229 } 230 231 $user_details = null; 232 if ( $locked ) { 233 $user = get_userdata( $user_id ); 234 $user_details = array( 235 'name' => $user->display_name, 236 ); 237 $avatar = get_avatar( $user_id, 64 ); 238 if ( $avatar ) { 239 if ( preg_match( "|src='([^']+)'|", $avatar, $matches ) ) { 240 $user_details['avatar'] = $matches[1]; 241 } 242 } 243 } 244 245 $lock_details = array( 246 'isLocked' => $locked, 247 'user' => $user_details, 248 ); 249 } else { 250 251 // Lock the post. 252 $active_post_lock = wp_set_post_lock( $post->ID ); 253 $lock_details = array( 254 'isLocked' => false, 255 'activePostLock' => esc_attr( implode( ':', $active_post_lock ) ), 256 ); 257 } 258 259 $editor_settings = array( 260 'alignWide' => $align_wide, 261 'availableTemplates' => $available_templates, 262 'allowedBlockTypes' => $allowed_block_types, 263 'disableCustomColors' => get_theme_support( 'disable-custom-colors' ), 264 'disableCustomFontSizes' => get_theme_support( 'disable-custom-font-sizes' ), 265 'disablePostFormats' => ! current_theme_supports( 'post-formats' ), 266 'titlePlaceholder' => apply_filters( 'enter_title_here', __( 'Add title', 'gutenberg' ), $post ), 267 'bodyPlaceholder' => apply_filters( 'write_your_story', __( 'Start writing or type / to choose a block', 'gutenberg' ), $post ), 268 'isRTL' => is_rtl(), 269 'autosaveInterval' => 10, 270 'maxUploadFileSize' => $max_upload_size, 271 'allowedMimeTypes' => get_allowed_mime_types(), 272 'styles' => $styles, 273 'imageSizes' => gutenberg_get_available_image_sizes(), 274 'richEditingEnabled' => user_can_richedit(), 275 276 // Ideally, we'd remove this and rely on a REST API endpoint. 277 'postLock' => $lock_details, 278 'postLockUtils' => array( 279 'nonce' => wp_create_nonce( 'lock-post_' . $post->ID ), 280 'unlockNonce' => wp_create_nonce( 'update-post_' . $post->ID ), 281 'ajaxUrl' => admin_url( 'admin-ajax.php' ), 282 ), 283 284 // Whether or not to load the 'postcustom' meta box is stored as a user meta 285 // field so that we're not always loading its assets. 286 'enableCustomFields' => (bool) get_user_meta( get_current_user_id(), 'enable_custom_fields', true ), 287 ); 288 289 $post_autosave = gutenberg_get_autosave_newer_than_post_save( $post ); 290 if ( $post_autosave ) { 291 $editor_settings['autosave'] = array( 292 'editLink' => get_edit_post_link( $post_autosave->ID ), 293 ); 294 } 295 296 if ( false !== $color_palette ) { 297 $editor_settings['colors'] = $color_palette; 298 } 299 300 if ( false !== $font_sizes ) { 301 $editor_settings['fontSizes'] = $font_sizes; 302 } 303 304 if ( ! empty( $post_type_object->template ) ) { 305 $editor_settings['template'] = $post_type_object->template; 306 $editor_settings['templateLock'] = ! empty( $post_type_object->template_lock ) ? $post_type_object->template_lock : false; 307 } 308 309 $current_screen = get_current_screen(); 310 $core_meta_boxes = array(); 311 312 // Make sure the current screen is set as well as the normal core metaboxes. 313 if ( isset( $current_screen->id ) && isset( $wp_meta_boxes[ $current_screen->id ]['normal']['core'] ) ) { 314 $core_meta_boxes = $wp_meta_boxes[ $current_screen->id ]['normal']['core']; 315 } 316 317 // Check if the Custom Fields meta box has been removed at some point. 318 if ( ! isset( $core_meta_boxes['postcustom'] ) || ! $core_meta_boxes['postcustom'] ) { 319 unset( $editor_settings['enableCustomFields'] ); 320 } 321 322 /** 323 * Filters the settings to pass to the block editor. 324 * 325 * @since 3.7.0 326 * 327 * @param array $editor_settings Default editor settings. 328 * @param WP_Post $post Post being edited. 329 */ 330 $editor_settings = apply_filters( 'block_editor_settings', $editor_settings, $post ); 331 332 $init_script = <<<JS 333 ( function() { 334 window._wpLoadBlockEditor = new Promise( function( resolve ) { 335 wp.domReady( function() { 336 resolve( wp.editPost.initializeEditor( 'editor', "%s", %d, %s, %s ) ); 337 } ); 338 } ); 339 } )(); 340 JS; 341 342 $script = sprintf( 343 $init_script, 344 $post->post_type, 345 $post->ID, 346 wp_json_encode( $editor_settings ), 347 wp_json_encode( $initial_edits ) 348 ); 349 wp_add_inline_script( 'wp-edit-post', $script ); 350 351 /** 352 * Scripts 353 */ 354 wp_enqueue_media( 355 array( 356 'post' => $post->ID, 357 ) 358 ); 359 wp_tinymce_inline_scripts(); 360 wp_enqueue_editor(); 361 362 /** 363 * Styles 364 */ 365 wp_enqueue_style( 'wp-edit-post' ); 366 367 /** 368 * Fires after block assets have been enqueued for the editing interface. 369 * 370 * Call `add_action` on any hook before 'admin_enqueue_scripts'. 371 * 372 * In the function call you supply, simply use `wp_enqueue_script` and 373 * `wp_enqueue_style` to add your functionality to the Gutenberg editor. 374 * 375 * @since 0.4.0 376 */ 377 do_action( 'enqueue_block_editor_assets' ); 378 } 379 22 380 } 23 381 … … 170 528 }, 11 ); 171 529 530 add_action( 'wp_enqueue_scripts', function( $hook ) { 531 // Gutenberg requires the post-locking functions defined within: 532 // See `show_post_locked_dialog` and `get_post_metadata` filters below. 533 include_once ABSPATH . 'wp-admin/includes/post.php'; 534 535 gutenberg_editor_scripts_and_styles( $hook ); 536 } ); 537 172 538 add_action( 'enqueue_block_editor_assets', function() { 173 539 wp_enqueue_script( 'button-readonly', get_template_directory_uri() . '/js/button-readonly.js', array( 'wp-blocks', 'wp-element' ), null );
Note: See TracChangeset
for help on using the changeset viewer.