Make WordPress Core

Changeset 62058


Ignore:
Timestamp:
03/19/2026 07:35:44 AM (7 months ago)
Author:
ellatrix
Message:

Real-time collaboration: change to opt-in (off-by-default).

See: ​https://wordpress.slack.com/archives/C07NVJ51X6K/p1773850504196589.

We are intentionally changing the option name so that it will be off-by-default for everyone, including those that installed a beta release where the feature was on-by-default.

Developed in: ​https://github.com/WordPress/wordpress-develop/pull/11289.

Fixes #64845.
Props czarate, peterwilsoncc, jorbin.

Location:
trunk
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-admin/includes/schema.php

    r61992 r62058  
    410410
    411411        $defaults = array(
    412                 'siteurl'                           => $guessurl,
    413                 'home'                              => $guessurl,
    414                 'blogname'                          => __( 'My Site' ),
    415                 'blogdescription'                   => '',
    416                 'users_can_register'                => 0,
    417                 'admin_email'                       => 'you@example.com',
     412                'siteurl'                         => $guessurl,
     413                'home'                            => $guessurl,
     414                'blogname'                        => __( 'My Site' ),
     415                'blogdescription'                 => '',
     416                'users_can_register'              => 0,
     417                'admin_email'                     => 'you@example.com',
    418418                /* translators: Default start of the week. 0 = Sunday, 1 = Monday. */
    419                 'start_of_week'                     => _x( '1', 'start of week' ),
    420                 'use_balanceTags'                   => 0,
    421                 'use_smilies'                       => 1,
    422                 'require_name_email'                => 1,
    423                 'comments_notify'                   => 1,
    424                 'posts_per_rss'                     => 10,
    425                 'rss_use_excerpt'                   => 0,
    426                 'mailserver_url'                    => 'mail.example.com',
    427                 'mailserver_login'                  => 'login@example.com',
    428                 'mailserver_pass'                   => '',
    429                 'mailserver_port'                   => 110,
    430                 'default_category'                  => 1,
    431                 'default_comment_status'            => 'open',
    432                 'default_ping_status'               => 'open',
    433                 'default_pingback_flag'             => 1,
    434                 'posts_per_page'                    => 10,
     419                'start_of_week'                   => _x( '1', 'start of week' ),
     420                'use_balanceTags'                 => 0,
     421                'use_smilies'                     => 1,
     422                'require_name_email'              => 1,
     423                'comments_notify'                 => 1,
     424                'posts_per_rss'                   => 10,
     425                'rss_use_excerpt'                 => 0,
     426                'mailserver_url'                  => 'mail.example.com',
     427                'mailserver_login'                => 'login@example.com',
     428                'mailserver_pass'                 => '',
     429                'mailserver_port'                 => 110,
     430                'default_category'                => 1,
     431                'default_comment_status'          => 'open',
     432                'default_ping_status'             => 'open',
     433                'default_pingback_flag'           => 1,
     434                'posts_per_page'                  => 10,
    435435                /* translators: Default date format, see https://www.php.net/manual/datetime.format.php */
    436                 'date_format'                       => __( 'F j, Y' ),
     436                'date_format'                     => __( 'F j, Y' ),
    437437                /* translators: Default time format, see https://www.php.net/manual/datetime.format.php */
    438                 'time_format'                       => __( 'g:i a' ),
     438                'time_format'                     => __( 'g:i a' ),
    439439                /* translators: Links last updated date format, see https://www.php.net/manual/datetime.format.php */
    440                 'links_updated_date_format'         => __( 'F j, Y g:i a' ),
    441                 'comment_moderation'                => 0,
    442                 'moderation_notify'                 => 1,
    443                 'permalink_structure'               => '',
    444                 'rewrite_rules'                     => '',
    445                 'hack_file'                         => 0,
    446                 'blog_charset'                      => 'UTF-8',
    447                 'moderation_keys'                   => '',
    448                 'active_plugins'                    => array(),
    449                 'category_base'                     => '',
    450                 'ping_sites'                        => 'https://rpc.pingomatic.com/',
    451                 'comment_max_links'                 => 2,
    452                 'gmt_offset'                        => $gmt_offset,
     440                'links_updated_date_format'       => __( 'F j, Y g:i a' ),
     441                'comment_moderation'              => 0,
     442                'moderation_notify'               => 1,
     443                'permalink_structure'             => '',
     444                'rewrite_rules'                   => '',
     445                'hack_file'                       => 0,
     446                'blog_charset'                    => 'UTF-8',
     447                'moderation_keys'                 => '',
     448                'active_plugins'                  => array(),
     449                'category_base'                   => '',
     450                'ping_sites'                      => 'https://rpc.pingomatic.com/',
     451                'comment_max_links'               => 2,
     452                'gmt_offset'                      => $gmt_offset,
    453453
    454454                // 1.5.0
    455                 'default_email_category'            => 1,
    456                 'recently_edited'                   => '',
    457                 'template'                          => $template,
    458                 'stylesheet'                        => $stylesheet,
    459                 'comment_registration'              => 0,
    460                 'html_type'                         => 'text/html',
     455                'default_email_category'          => 1,
     456                'recently_edited'                 => '',
     457                'template'                        => $template,
     458                'stylesheet'                      => $stylesheet,
     459                'comment_registration'            => 0,
     460                'html_type'                       => 'text/html',
    461461
    462462                // 1.5.1
    463                 'use_trackback'                     => 0,
     463                'use_trackback'                   => 0,
    464464
    465465                // 2.0.0
    466                 'default_role'                      => 'subscriber',
    467                 'db_version'                        => $wp_db_version,
     466                'default_role'                    => 'subscriber',
     467                'db_version'                      => $wp_db_version,
    468468
    469469                // 2.0.1
    470                 'uploads_use_yearmonth_folders'     => 1,
    471                 'upload_path'                       => '',
     470                'uploads_use_yearmonth_folders'   => 1,
     471                'upload_path'                     => '',
    472472
    473473                // 2.1.0
    474                 'blog_public'                       => '1',
    475                 'default_link_category'             => 2,
    476                 'show_on_front'                     => 'posts',
     474                'blog_public'                     => '1',
     475                'default_link_category'           => 2,
     476                'show_on_front'                   => 'posts',
    477477
    478478                // 2.2.0
    479                 'tag_base'                          => '',
     479                'tag_base'                        => '',
    480480
    481481                // 2.5.0
    482                 'show_avatars'                      => '1',
    483                 'avatar_rating'                     => 'G',
    484                 'upload_url_path'                   => '',
    485                 'thumbnail_size_w'                  => 150,
    486                 'thumbnail_size_h'                  => 150,
    487                 'thumbnail_crop'                    => 1,
    488                 'medium_size_w'                     => 300,
    489                 'medium_size_h'                     => 300,
     482                'show_avatars'                    => '1',
     483                'avatar_rating'                   => 'G',
     484                'upload_url_path'                 => '',
     485                'thumbnail_size_w'                => 150,
     486                'thumbnail_size_h'                => 150,
     487                'thumbnail_crop'                  => 1,
     488                'medium_size_w'                   => 300,
     489                'medium_size_h'                   => 300,
    490490
    491491                // 2.6.0
    492                 'avatar_default'                    => 'mystery',
     492                'avatar_default'                  => 'mystery',
    493493
    494494                // 2.7.0
    495                 'large_size_w'                      => 1024,
    496                 'large_size_h'                      => 1024,
    497                 'image_default_link_type'           => 'none',
    498                 'image_default_size'                => '',
    499                 'image_default_align'               => '',
    500                 'close_comments_for_old_posts'      => 0,
    501                 'close_comments_days_old'           => 14,
    502                 'thread_comments'                   => 1,
    503                 'thread_comments_depth'             => 5,
    504                 'page_comments'                     => 0,
    505                 'comments_per_page'                 => 50,
    506                 'default_comments_page'             => 'newest',
    507                 'comment_order'                     => 'asc',
    508                 'sticky_posts'                      => array(),
    509                 'widget_categories'                 => array(),
    510                 'widget_text'                       => array(),
    511                 'widget_rss'                        => array(),
    512                 'uninstall_plugins'                 => array(),
     495                'large_size_w'                    => 1024,
     496                'large_size_h'                    => 1024,
     497                'image_default_link_type'         => 'none',
     498                'image_default_size'              => '',
     499                'image_default_align'             => '',
     500                'close_comments_for_old_posts'    => 0,
     501                'close_comments_days_old'         => 14,
     502                'thread_comments'                 => 1,
     503                'thread_comments_depth'           => 5,
     504                'page_comments'                   => 0,
     505                'comments_per_page'               => 50,
     506                'default_comments_page'           => 'newest',
     507                'comment_order'                   => 'asc',
     508                'sticky_posts'                    => array(),
     509                'widget_categories'               => array(),
     510                'widget_text'                     => array(),
     511                'widget_rss'                      => array(),
     512                'uninstall_plugins'               => array(),
    513513
    514514                // 2.8.0
    515                 'timezone_string'                   => $timezone_string,
     515                'timezone_string'                 => $timezone_string,
    516516
    517517                // 3.0.0
    518                 'page_for_posts'                    => 0,
    519                 'page_on_front'                     => 0,
     518                'page_for_posts'                  => 0,
     519                'page_on_front'                   => 0,
    520520
    521521                // 3.1.0
    522                 'default_post_format'               => 0,
     522                'default_post_format'             => 0,
    523523
    524524                // 3.5.0
    525                 'link_manager_enabled'              => 0,
     525                'link_manager_enabled'            => 0,
    526526
    527527                // 4.3.0
    528                 'finished_splitting_shared_terms'   => 1,
    529                 'site_icon'                         => 0,
     528                'finished_splitting_shared_terms' => 1,
     529                'site_icon'                       => 0,
    530530
    531531                // 4.4.0
    532                 'medium_large_size_w'               => 768,
    533                 'medium_large_size_h'               => 0,
     532                'medium_large_size_w'             => 768,
     533                'medium_large_size_h'             => 0,
    534534
    535535                // 4.9.6
    536                 'wp_page_for_privacy_policy'        => 0,
     536                'wp_page_for_privacy_policy'      => 0,
    537537
    538538                // 4.9.8
    539                 'show_comments_cookies_opt_in'      => 1,
     539                'show_comments_cookies_opt_in'    => 1,
    540540
    541541                // 5.3.0
    542                 'admin_email_lifespan'              => ( time() + 6 * MONTH_IN_SECONDS ),
     542                'admin_email_lifespan'            => ( time() + 6 * MONTH_IN_SECONDS ),
    543543
    544544                // 5.5.0
    545                 'disallowed_keys'                   => '',
    546                 'comment_previously_approved'       => 1,
    547                 'auto_plugin_theme_update_emails'   => array(),
     545                'disallowed_keys'                 => '',
     546                'comment_previously_approved'     => 1,
     547                'auto_plugin_theme_update_emails' => array(),
    548548
    549549                // 5.6.0
    550                 'auto_update_core_dev'              => 'enabled',
    551                 'auto_update_core_minor'            => 'enabled',
     550                'auto_update_core_dev'            => 'enabled',
     551                'auto_update_core_minor'          => 'enabled',
    552552                /*
    553553                 * Default to enabled for new installs.
    554554                 * See https://core.trac.wordpress.org/ticket/51742.
    555555                 */
    556                 'auto_update_core_major'            => 'enabled',
     556                'auto_update_core_major'          => 'enabled',
    557557
    558558                // 5.8.0
    559                 'wp_force_deactivated_plugins'      => array(),
     559                'wp_force_deactivated_plugins'    => array(),
    560560
    561561                // 6.4.0
    562                 'wp_attachment_pages_enabled'       => 0,
     562                'wp_attachment_pages_enabled'     => 0,
    563563
    564564                // 6.9.0
    565                 'wp_notes_notify'                   => 1,
     565                'wp_notes_notify'                 => 1,
    566566
    567567                // 7.0.0
    568                 'wp_enable_real_time_collaboration' => 1,
     568                'wp_collaboration_enabled'        => 0,
    569569        );
    570570
  • trunk/src/wp-admin/options-writing.php

    r61833 r62058  
    111111</tr>
    112112<tr>
    113 <th scope="row"><label for="wp_enable_real_time_collaboration"><?php _e( 'Collaboration' ); ?></label></th>
    114 <td>
    115         <input name="wp_enable_real_time_collaboration" type="checkbox" id="wp_enable_real_time_collaboration" value="1" <?php checked( '1', get_option( 'wp_enable_real_time_collaboration' ) ); ?> />
    116         <label for="wp_enable_real_time_collaboration"><?php _e( 'Enable real-time collaboration' ); ?></label>
     113<th scope="row"><?php _e( 'Collaboration' ); ?></th>
     114<td>
     115        <label for="wp_collaboration_enabled">
     116                <input name="wp_collaboration_enabled" type="checkbox" id="wp_collaboration_enabled" value="1" <?php checked( '1', (bool) get_option( 'wp_collaboration_enabled' ) ); ?> />
     117                <?php _e( 'Enable real-time collaboration' ); ?>
     118        </label>
    117119</td>
    118120</tr>
  • trunk/src/wp-admin/options.php

    r61833 r62058  
    154154                'default_link_category',
    155155                'default_post_format',
    156                 'wp_enable_real_time_collaboration',
     156                'wp_collaboration_enabled',
    157157        ),
    158158);
  • trunk/src/wp-includes/collaboration.php

    r61986 r62058  
    1919        global $pagenow;
    2020
    21         if ( ! get_option( 'wp_enable_real_time_collaboration' ) ) {
     21        if ( ! (bool) get_option( 'wp_collaboration_enabled' ) ) {
    2222                return;
    2323        }
  • trunk/src/wp-includes/default-filters.php

    r62025 r62058  
    486486add_filter( 'pre_option_gmt_offset', 'wp_timezone_override_offset' );
    487487
    488 // If the upgrade hasn't run yet, set some default options.
    489 add_filter( 'default_option_link_manager_enabled', '__return_true' ); // Assume link manager is used.
    490 add_filter( 'default_option_wp_enable_real_time_collaboration', '__return_true' ); // Enable real-time collaboration.
     488// If the upgrade hasn't run yet, assume link manager is used.
     489add_filter( 'default_option_link_manager_enabled', '__return_true' );
    491490
    492491// This option no longer exists; tell plugins we always support auto-embedding.
  • trunk/src/wp-includes/option.php

    r61865 r62058  
    28882888        register_setting(
    28892889                'writing',
    2890                 'wp_enable_real_time_collaboration',
     2890                'wp_collaboration_enabled',
    28912891                array(
    28922892                        'type'              => 'boolean',
    28932893                        'description'       => __( 'Enable Real-Time Collaboration' ),
    28942894                        'sanitize_callback' => 'rest_sanitize_boolean',
    2895                         'default'           => true,
     2895                        'default'           => false,
    28962896                        'show_in_rest'      => true,
    28972897                )
  • trunk/src/wp-includes/post.php

    r62041 r62058  
    658658        );
    659659
    660         if ( get_option( 'wp_enable_real_time_collaboration' ) ) {
     660        if ( (bool) get_option( 'wp_collaboration_enabled' ) ) {
    661661                register_post_type(
    662662                        'wp_sync_storage',
    … …  
    86738673        );
    86748674
    8675         if ( get_option( 'wp_enable_real_time_collaboration' ) ) {
     8675        if ( (bool) get_option( 'wp_collaboration_enabled' ) ) {
    86768676                register_meta(
    86778677                        'post',
  • trunk/src/wp-includes/rest-api.php

    r61833 r62058  
    431431
    432432        // Collaboration.
    433         if ( get_option( 'wp_enable_real_time_collaboration' ) ) {
     433        if ( (bool) get_option( 'wp_collaboration_enabled' ) ) {
    434434                $sync_storage = new WP_Sync_Post_Meta_Storage();
    435435                $sync_server  = new WP_HTTP_Polling_Sync_Server( $sync_storage );
  • trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php

    r61946 r62058  
    255255                 *   document, which can lead to duplicate inserts or deletions.
    256256                 */
    257                 $is_collaboration_enabled = get_option( 'wp_enable_real_time_collaboration' );
     257                $is_collaboration_enabled = (bool) get_option( 'wp_collaboration_enabled' );
    258258
    259259                if ( $is_draft && (int) $post->post_author === $user_id && ! $post_lock && ! $is_collaboration_enabled ) {
  • trunk/tests/phpunit/tests/rest-api/rest-autosaves-controller.php

    r61833 r62058  
    571571
    572572        public function test_rest_autosave_draft_post_same_author() {
    573                 add_filter( 'pre_option_wp_enable_real_time_collaboration', '__return_zero' ); // Zero as false doesn't work for pre-flight options.
     573                add_filter( 'pre_option_wp_collaboration_enabled', '__return_zero' ); // Zero as false doesn't work for pre-flight options.
    574574
    575575                wp_set_current_user( self::$editor_id );
    … …  
    747747
    748748        public function test_update_item_draft_page_with_parent() {
    749                 add_filter( 'pre_option_wp_enable_real_time_collaboration', '__return_zero' ); // Zero as false doesn't work for pre-flight options.
     749                add_filter( 'pre_option_wp_collaboration_enabled', '__return_zero' ); // Zero as false doesn't work for pre-flight options.
    750750
    751751                wp_set_current_user( self::$editor_id );
    … …  
    931931         */
    932932        public function test_rest_autosave_draft_post_same_author_with_rtc() {
    933                 add_filter( 'pre_option_wp_enable_real_time_collaboration', '__return_true' );
     933                add_filter( 'pre_option_wp_collaboration_enabled', '__return_true' );
    934934
    935935                wp_set_current_user( self::$editor_id );
    … …  
    977977         */
    978978        public function test_update_item_draft_page_with_parent_with_rtc() {
    979                 add_filter( 'pre_option_wp_enable_real_time_collaboration', '__return_true' );
     979                add_filter( 'pre_option_wp_collaboration_enabled', '__return_true' );
    980980
    981981                wp_set_current_user( self::$editor_id );
  • trunk/tests/phpunit/tests/rest-api/rest-settings-controller.php

    r61943 r62058  
    120120                        'default_comment_status',
    121121                        'site_icon', // Registered in wp-includes/blocks/site-logo.php
    122                         'wp_enable_real_time_collaboration',
     122                        'wp_collaboration_enabled',
    123123                );
    124124
  • trunk/tests/phpunit/tests/rest-api/rest-sync-server.php

    r61865 r62058  
    1818                self::$subscriber_id = $factory->user->create( array( 'role' => 'subscriber' ) );
    1919                self::$post_id       = $factory->post->create( array( 'post_author' => self::$editor_id ) );
     20
     21                // Enable option in setUpBeforeClass to ensure REST routes are registered.
     22                update_option( 'wp_collaboration_enabled', 1 );
    2023        }
    2124
    … …  
    2326                self::delete_user( self::$editor_id );
    2427                self::delete_user( self::$subscriber_id );
     28                delete_option( 'wp_collaboration_enabled' );
    2529                wp_delete_post( self::$post_id, true );
    2630        }
    … …  
    3034
    3135                // Enable option for tests.
    32                 add_filter( 'pre_option_wp_enable_real_time_collaboration', '__return_true' );
     36                update_option( 'wp_collaboration_enabled', 1 );
    3337
    3438                // Reset storage post ID cache to ensure clean state after transaction rollback.
    … …  
    109113                global $wp_rest_server;
    110114
    111                 // Remove the pre_option filter added in ::set_up() so get_option() uses its default logic.
    112                 remove_filter( 'pre_option_wp_enable_real_time_collaboration', '__return_true' );
    113 
    114115                // Ensure the option is not in the database.
    115                 delete_option( 'wp_enable_real_time_collaboration' );
     116                delete_option( 'wp_collaboration_enabled' );
    116117
    117118                // Reset the REST server so routes are re-registered from scratch.
    … …  
    119120
    120121                $routes = rest_get_server()->get_routes();
    121                 $this->assertArrayHasKey( '/wp-sync/v1/updates', $routes );
     122                $this->assertArrayNotHasKey( '/wp-sync/v1/updates', $routes );
    122123        }
    123124
  • trunk/tests/qunit/fixtures/wp-api-generated.js

    r61982 r62058  
    2121        "wp-site-health/v1",
    2222        "wp-block-editor/v1",
    23         "wp-abilities/v1",
    24         "wp-sync/v1"
     23        "wp-abilities/v1"
    2524    ],
    2625    "authentication": {
    … …  
    1116111160                            "required": false
    1116211161                        },
    11163                         "wp_enable_real_time_collaboration": {
     11162                        "wp_collaboration_enabled": {
    1116411163                            "title": "",
    1116511164                            "description": "Enable Real-Time Collaboration",
    … …  
    1277412773                }
    1277512774            ]
    12776         },
    12777         "/wp-sync/v1": {
    12778             "namespace": "wp-sync/v1",
    12779             "methods": [
    12780                 "GET"
    12781             ],
    12782             "endpoints": [
    12783                 {
    12784                     "methods": [
    12785                         "GET"
    12786                     ],
    12787                     "args": {
    12788                         "namespace": {
    12789                             "default": "wp-sync/v1",
    12790                             "required": false
    12791                         },
    12792                         "context": {
    12793                             "default": "view",
    12794                             "required": false
    12795                         }
    12796                     }
    12797                 }
    12798             ],
    12799             "_links": {
    12800                 "self": [
    12801                     {
    12802                         "href": "http://example.org/index.php?rest_route=/wp-sync/v1"
    12803                     }
    12804                 ]
    12805             }
    12806         },
    12807         "/wp-sync/v1/updates": {
    12808             "namespace": "wp-sync/v1",
    12809             "methods": [
    12810                 "POST"
    12811             ],
    12812             "endpoints": [
    12813                 {
    12814                     "methods": [
    12815                         "POST"
    12816                     ],
    12817                     "args": {
    12818                         "rooms": {
    12819                             "items": {
    12820                                 "properties": {
    12821                                     "after": {
    12822                                         "minimum": 0,
    12823                                         "required": true,
    12824                                         "type": "integer"
    12825                                     },
    12826                                     "awareness": {
    12827                                         "required": true,
    12828                                         "type": [
    12829                                             "object",
    12830                                             "null"
    12831                                         ]
    12832                                     },
    12833                                     "client_id": {
    12834                                         "minimum": 1,
    12835                                         "required": true,
    12836                                         "type": "integer"
    12837                                     },
    12838                                     "room": {
    12839                                         "required": true,
    12840                                         "type": "string",
    12841                                         "pattern": "^[^/]+/[^/:]+(?::\\S+)?$"
    12842                                     },
    12843                                     "updates": {
    12844                                         "items": {
    12845                                             "properties": {
    12846                                                 "data": {
    12847                                                     "type": "string",
    12848                                                     "required": true
    12849                                                 },
    12850                                                 "type": {
    12851                                                     "type": "string",
    12852                                                     "required": true,
    12853                                                     "enum": [
    12854                                                         "compaction",
    12855                                                         "sync_step1",
    12856                                                         "sync_step2",
    12857                                                         "update"
    12858                                                     ]
    12859                                                 }
    12860                                             },
    12861                                             "required": true,
    12862                                             "type": "object"
    12863                                         },
    12864                                         "minItems": 0,
    12865                                         "required": true,
    12866                                         "type": "array"
    12867                                     }
    12868                                 },
    12869                                 "type": "object"
    12870                             },
    12871                             "type": "array",
    12872                             "required": true
    12873                         }
    12874                     }
    12875                 }
    12876             ],
    12877             "_links": {
    12878                 "self": [
    12879                     {
    12880                         "href": "http://example.org/index.php?rest_route=/wp-sync/v1/updates"
    12881                     }
    12882                 ]
    12883             }
    1288412775        }
    1288512776    },
    … …  
    1477714668    "default_category": 1,
    1477814669    "default_post_format": "0",
    14779     "wp_enable_real_time_collaboration": true,
     14670    "wp_collaboration_enabled": false,
    1478014671    "posts_per_page": 10,
    1478114672    "show_on_front": "posts",
Note: See TracChangeset for help on using the changeset viewer.