Make WordPress Core

Changeset 61689


Ignore:
Timestamp:
02/19/2026 10:25:06 AM (3 weeks ago)
Author:
ellatrix
Message:

Real-time collaboration: add new REST endpoints, setting, and registered post meta.

Syncs/merges the PHP changes from the Gutenberg PR https://github.com/WordPress/gutenberg/pull/75366.

In Gutenberg, we have added support for real-time collaboration using CRDT documents (via the [Yjs library](https://yjs.dev/)). This work has suggested the following additions to WordPress:

  1. A default "sync provider" based on HTTP polling that allows collaborators to share updates with each other. Previously, we relied on WebRTC connections between collaborators for this purpose, but it proved unreliable under many network conditions.
    • Our solution is designed to work on any WordPress installation.
    • HTTP polling is the transport we identified as most likely to work universally.
    • Given the isolation and lifecycle of PHP processes, updates must be stored centrally in order to be shared among peers. We have chosen to store updates in post meta against a special post type, but alternate storage mechanisms are possible.
    • Collaborative editing can involve syncing multiple CRDT documents. To limit the number of connections consumed by this provider, requests are batched.
    • To prevent unbounded linear growth, updates are periodically compacted.
    • To avoid excessive load on lower-resourced hosts, this provider will benefit from usage limits (e.g., a maximum of three connected collaborators) enforced by the client (Gutenberg).
  1. A new registered post meta that allows Gutenberg to persist CRDT documents alongside posts.
    • This provides all collaborators with a "shared starting point" for the collaborative session, which avoids duplicate updates.
    • Content stored in the WordPress database always remains the source of truth. If the content differs from the persisted CRDT document, the CRDT document is updated to match the database.
  1. A new Writing setting that allows users to opt-in to real-time collaboration.
    • Enabling real-time collaboration disables post lock functionality and connects users to the sync provider.
  1. A behavior change to autosaves is needed. When the the original author is editing a draft post (post_status == 'draft' OR 'auto-draft') and they hold the post lock, the autosave targets the actual post instead of an autosave revision. This puts the post data and the persisted CRDT document out of sync and leads to duplicate updates. When real-time collaboration is enabled, all collaborators must autosave in the same way.

This PR provides a proposed implementation of the changes above. This corresponding Gutenberg PR moves the work from the experimental directory to lib/compat:

https://github.com/WordPress/gutenberg/pull/75366

Cumulative work to add this functionality can be found using this label:

https://github.com/WordPress/gutenberg/issues?q=label%3A%22%5BFeature%5D%20Real-time%20Collaboration%22%20is%3Apr

Developed https://github.com/WordPress/wordpress-develop/pull/10894.

Props czarate, paulkevan, ellatrix, timothyblynjacobs, westonruter, jorgefilipecosta, mindctrl.
Fixes #64622.

Location:
trunk
Files:
6 added
12 edited

Legend:

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

    r61615 r61689  
    564564        // 6.9.0
    565565        'wp_notes_notify'                 => 1,
     566
     567        // 7.0.0
     568        'enable_real_time_collaboration'  => 1,
    566569    );
    567570
  • trunk/src/wp-admin/options-writing.php

    r60805 r61689  
    108108<?php endforeach; ?>
    109109    </select>
     110</td>
     111</tr>
     112<tr>
     113<th scope="row"><label for="enable_real_time_collaboration"><?php _e( 'Collaboration' ); ?></label></th>
     114<td>
     115    <input name="enable_real_time_collaboration" type="checkbox" id="enable_real_time_collaboration" value="1" <?php checked( '1', get_option( 'enable_real_time_collaboration' ) ); ?> />
     116    <label for="enable_real_time_collaboration"><?php _e( 'Enable real-time collaboration' ); ?></label>
    110117</td>
    111118</tr>
  • trunk/src/wp-admin/options.php

    r61325 r61689  
    154154        'default_link_category',
    155155        'default_post_format',
     156        'enable_real_time_collaboration',
    156157    ),
    157158);
  • trunk/src/wp-includes/certificates/ca-bundle.crt

    r61685 r61689  
    22## Bundle of CA Root Certificates
    33##
    4 ## Certificate data from Mozilla as of: Tue Dec  2 04:12:02 2025 GMT
     4## Certificate data from Mozilla as of: Tue Nov  4 04:12:02 2025 GMT
    55##
    66## Find updated versions here: https://curl.se/docs/caextract.html
     
    1616## Just configure this file as the SSLCACertificateFile.
    1717##
    18 ## Conversion done with mk-ca-bundle.pl version 1.30.
    19 ## SHA256: a903b3cd05231e39332515ef7ebe37e697262f39515a52015c23c62805b73cd0
     18## Conversion done with mk-ca-bundle.pl version 1.29.
     19## SHA256: 039132bff5179ce57cec5803ba59fe37abe6d0297aeb538c5af27847f0702517
    2020##
    2121
     
    31683168-----END CERTIFICATE-----
    31693169
     3170CommScope Public Trust ECC Root-01
     3171==================================
     3172-----BEGIN CERTIFICATE-----
     3173MIICHTCCAaOgAwIBAgIUQ3CCd89NXTTxyq4yLzf39H91oJ4wCgYIKoZIzj0EAwMwTjELMAkGA1UE
     3174BhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwiQ29tbVNjb3BlIFB1YmxpYyBUcnVz
     3175dCBFQ0MgUm9vdC0wMTAeFw0yMTA0MjgxNzM1NDNaFw00NjA0MjgxNzM1NDJaME4xCzAJBgNVBAYT
     3176AlVTMRIwEAYDVQQKDAlDb21tU2NvcGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1c3Qg
     3177RUNDIFJvb3QtMDEwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARLNumuV16ocNfQj3Rid8NeeqrltqLx
     3178eP0CflfdkXmcbLlSiFS8LwS+uM32ENEp7LXQoMPwiXAZu1FlxUOcw5tjnSCDPgYLpkJEhRGnSjot
     31796dZoL0hOUysHP029uax3OVejQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
     3180A1UdDgQWBBSOB2LAUN3GGQYARnQE9/OufXVNMDAKBggqhkjOPQQDAwNoADBlAjEAnDPfQeMjqEI2
     3181Jpc1XHvr20v4qotzVRVcrHgpD7oh2MSg2NED3W3ROT3Ek2DS43KyAjB8xX6I01D1HiXo+k515liW
     3182pDVfG2XqYZpwI7UNo5uSUm9poIyNStDuiw7LR47QjRE=
     3183-----END CERTIFICATE-----
     3184
     3185CommScope Public Trust ECC Root-02
     3186==================================
     3187-----BEGIN CERTIFICATE-----
     3188MIICHDCCAaOgAwIBAgIUKP2ZYEFHpgE6yhR7H+/5aAiDXX0wCgYIKoZIzj0EAwMwTjELMAkGA1UE
     3189BhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwiQ29tbVNjb3BlIFB1YmxpYyBUcnVz
     3190dCBFQ0MgUm9vdC0wMjAeFw0yMTA0MjgxNzQ0NTRaFw00NjA0MjgxNzQ0NTNaME4xCzAJBgNVBAYT
     3191AlVTMRIwEAYDVQQKDAlDb21tU2NvcGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1c3Qg
     3192RUNDIFJvb3QtMDIwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAR4MIHoYx7l63FRD/cHB8o5mXxO1Q/M
     3193MDALj2aTPs+9xYa9+bG3tD60B8jzljHz7aRP+KNOjSkVWLjVb3/ubCK1sK9IRQq9qEmUv4RDsNuE
     3194SgMjGWdqb8FuvAY5N9GIIvejQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
     3195A1UdDgQWBBTmGHX/72DehKT1RsfeSlXjMjZ59TAKBggqhkjOPQQDAwNnADBkAjAmc0l6tqvmSfR9
     3196Uj/UQQSugEODZXW5hYA4O9Zv5JOGq4/nich/m35rChJVYaoR4HkCMHfoMXGsPHED1oQmHhS48zs7
     31973u1Z/GtMMH9ZzkXpc2AVmkzw5l4lIhVtwodZ0LKOag==
     3198-----END CERTIFICATE-----
     3199
     3200CommScope Public Trust RSA Root-01
     3201==================================
     3202-----BEGIN CERTIFICATE-----
     3203MIIFbDCCA1SgAwIBAgIUPgNJgXUWdDGOTKvVxZAplsU5EN0wDQYJKoZIhvcNAQELBQAwTjELMAkG
     3204A1UEBhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwiQ29tbVNjb3BlIFB1YmxpYyBU
     3205cnVzdCBSU0EgUm9vdC0wMTAeFw0yMTA0MjgxNjQ1NTRaFw00NjA0MjgxNjQ1NTNaME4xCzAJBgNV
     3206BAYTAlVTMRIwEAYDVQQKDAlDb21tU2NvcGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1
     3207c3QgUlNBIFJvb3QtMDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwSGWjDR1C45Ft
     3208nYSkYZYSwu3D2iM0GXb26v1VWvZVAVMP8syMl0+5UMuzAURWlv2bKOx7dAvnQmtVzslhsuitQDy6
     3209uUEKBU8bJoWPQ7VAtYXR1HHcg0Hz9kXHgKKEUJdGzqAMxGBWBB0HW0alDrJLpA6lfO741GIDuZNq
     3210ihS4cPgugkY4Iw50x2tBt9Apo52AsH53k2NC+zSDO3OjWiE260f6GBfZumbCk6SP/F2krfxQapWs
     3211vCQz0b2If4b19bJzKo98rwjyGpg/qYFlP8GMicWWMJoKz/TUyDTtnS+8jTiGU+6Xn6myY5QXjQ/c
     3212Zip8UlF1y5mO6D1cv547KI2DAg+pn3LiLCuz3GaXAEDQpFSOm117RTYm1nJD68/A6g3czhLmfTif
     3213BSeolz7pUcZsBSjBAg/pGG3svZwG1KdJ9FQFa2ww8esD1eo9anbCyxooSU1/ZOD6K9pzg4H/kQO9
     3214lLvkuI6cMmPNn7togbGEW682v3fuHX/3SZtS7NJ3Wn2RnU3COS3kuoL4b/JOHg9O5j9ZpSPcPYeo
     3215KFgo0fEbNttPxP/hjFtyjMcmAyejOQoBqsCyMWCDIqFPEgkBEa801M/XrmLTBQe0MXXgDW1XT2mH
     3216+VepuhX2yFJtocucH+X8eKg1mp9BFM6ltM6UCBwJrVbl2rZJmkrqYxhTnCwuwwIDAQABo0IwQDAP
     3217BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUN12mmnQywsL5x6YVEFm4
     32185P3luG0wDQYJKoZIhvcNAQELBQADggIBAK+nz97/4L1CjU3lIpbfaOp9TSp90K09FlxD533Ahuh6
     3219NWPxzIHIxgvoLlI1pKZJkGNRrDSsBTtXAOnTYtPZKdVUvhwQkZyybf5Z/Xn36lbQnmhUQo8mUuJM
     32203y+Xpi/SB5io82BdS5pYV4jvguX6r2yBS5KPQJqTRlnLX3gWsWc+QgvfKNmwrZggvkN80V4aCRck
     3221jXtdlemrwWCrWxhkgPut4AZ9HcpZuPN4KWfGVh2vtrV0KnahP/t1MJ+UXjulYPPLXAziDslg+Mkf
     3222Foom3ecnf+slpoq9uC02EJqxWE2aaE9gVOX2RhOOiKy8IUISrcZKiX2bwdgt6ZYD9KJ0DLwAHb/W
     3223NyVntHKLr4W96ioDj8z7PEQkguIBpQtZtjSNMgsSDesnwv1B10A8ckYpwIzqug/xBpMu95yo9GA+
     3224o/E4Xo4TwbM6l4c/ksp4qRyv0LAbJh6+cOx69TOY6lz/KwsETkPdY34Op054A5U+1C0wlREQKC6/
     3225oAI+/15Z0wUOlV9TRe9rh9VIzRamloPh37MG88EU26fsHItdkJANclHnYfkUyq+Dj7+vsQpZXdxc
     32261+SWrVtgHdqul7I52Qb1dgAT+GhMIbA1xNxVssnBQVocicCMb3SgazNNtQEo/a2tiRc7ppqEvOuM
     32276sRxJKi6KfkIsidWNTJf6jn7MZrVGczw
     3228-----END CERTIFICATE-----
     3229
     3230CommScope Public Trust RSA Root-02
     3231==================================
     3232-----BEGIN CERTIFICATE-----
     3233MIIFbDCCA1SgAwIBAgIUVBa/O345lXGN0aoApYYNK496BU4wDQYJKoZIhvcNAQELBQAwTjELMAkG
     3234A1UEBhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwiQ29tbVNjb3BlIFB1YmxpYyBU
     3235cnVzdCBSU0EgUm9vdC0wMjAeFw0yMTA0MjgxNzE2NDNaFw00NjA0MjgxNzE2NDJaME4xCzAJBgNV
     3236BAYTAlVTMRIwEAYDVQQKDAlDb21tU2NvcGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1
     3237c3QgUlNBIFJvb3QtMDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDh+g77aAASyE3V
     3238rCLENQE7xVTlWXZjpX/rwcRqmL0yjReA61260WI9JSMZNRTpf4mnG2I81lDnNJUDMrG0kyI9p+Kx
     32397eZ7Ti6Hmw0zdQreqjXnfuU2mKKuJZ6VszKWpCtYHu8//mI0SFHRtI1CrWDaSWqVcN3SAOLMV2MC
     3240e5bdSZdbkk6V0/nLKR8YSvgBKtJjCW4k6YnS5cciTNxzhkcAqg2Ijq6FfUrpuzNPDlJwnZXjfG2W
     3241Wy09X6GDRl224yW4fKcZgBzqZUPckXk2LHR88mcGyYnJ27/aaL8j7dxrrSiDeS/sOKUNNwFnJ5rp
     3242M9kzXzehxfCrPfp4sOcsn/Y+n2Dg70jpkEUeBVF4GiwSLFworA2iI540jwXmojPOEXcT1A6kHkIf
     3243hs1w/tkuFT0du7jyU1fbzMZ0KZwYszZ1OC4PVKH4kh+Jlk+71O6d6Ts2QrUKOyrUZHk2EOH5kQMr
     3244eyBUzQ0ZGshBMjTRsJnhkB4BQDa1t/qp5Xd1pCKBXbCL5CcSD1SIxtuFdOa3wNemKfrb3vOTlycE
     3245VS8KbzfFPROvCgCpLIscgSjX74Yxqa7ybrjKaixUR9gqiC6vwQcQeKwRoi9C8DfF8rhW3Q5iLc4t
     3246Vn5V8qdE9isy9COoR+jUKgF4z2rDN6ieZdIs5fq6M8EGRPbmz6UNp2YINIos8wIDAQABo0IwQDAP
     3247BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUR9DnsSL/nSz12Vdgs7Gx
     3248cJXvYXowDQYJKoZIhvcNAQELBQADggIBAIZpsU0v6Z9PIpNojuQhmaPORVMbc0RTAIFhzTHjCLqB
     3249KCh6krm2qMhDnscTJk3C2OVVnJJdUNjCK9v+5qiXz1I6JMNlZFxHMaNlNRPDk7n3+VGXu6TwYofF
     32501gbTl4MgqX67tiHCpQ2EAOHyJxCDut0DgdXdaMNmEMjRdrSzbymeAPnCKfWxkxlSaRosTKCL4BWa
     3251MS/TiJVZbuXEs1DIFAhKm4sTg7GkcrI7djNB3NyqpgdvHSQSn8h2vS/ZjvQs7rfSOBAkNlEv41xd
     3252gSGn2rtO/+YHqP65DSdsu3BaVXoT6fEqSWnHX4dXTEN5bTpl6TBcQe7rd6VzEojov32u5cSoHw2O
     3253HG1QAk8mGEPej1WFsQs3BWDJVTkSBKEqz3EWnzZRSb9wO55nnPt7eck5HHisd5FUmrh1CoFSl+Nm
     3254YWvtPjgelmFV4ZFUjO2MJB+ByRCac5krFk5yAD9UG/iNuovnFNa2RU9g7Jauwy8CTl2dlklyALKr
     3255dVwPaFsdZcJfMw8eD/A7hvWwTruc9+olBdytoptLFwG+Qt81IR2tq670v64fG9PiO/yzcnMcmyiQ
     3256iRM9HcEARwmWmjgb3bHPDcK0RPOWlc4yOo80nOAXx17Org3bhzjlP1v9mxnhMUF6cKojawHhRUzN
     3257lM47ni3niAIi9G7oyOzWPPO5std3eqx7
     3258-----END CERTIFICATE-----
     3259
    31703260Telekom Security TLS ECC Root 2020
    31713261==================================
  • trunk/src/wp-includes/default-filters.php

    r61661 r61689  
    787787add_action( 'init', '_wp_register_default_font_collections' );
    788788
     789// Collaboration.
     790add_action( 'admin_init', 'wp_collaboration_inject_setting' );
     791
    789792// Add ignoredHookedBlocks metadata attribute to the template and template part post types.
    790793add_filter( 'rest_pre_insert_wp_template', 'inject_ignored_hooked_blocks_metadata_attributes' );
  • trunk/src/wp-includes/option.php

    r61600 r61689  
    28992899
    29002900    register_setting(
     2901        'writing',
     2902        'enable_real_time_collaboration',
     2903        array(
     2904            'type'              => 'boolean',
     2905            'description'       => __( 'Enable Real-Time Collaboration' ),
     2906            'sanitize_callback' => 'rest_sanitize_boolean',
     2907            'default'           => true,
     2908            'show_in_rest'      => true,
     2909        )
     2910    );
     2911
     2912    register_setting(
    29012913        'reading',
    29022914        'posts_per_page',
  • trunk/src/wp-includes/post.php

    r61649 r61689  
    657657        )
    658658    );
     659
     660    if ( get_option( 'enable_real_time_collaboration' ) ) {
     661        register_post_type(
     662            'wp_sync_storage',
     663            array(
     664                'labels'             => array(
     665                    'name'          => __( 'Sync Updates' ),
     666                    'singular_name' => __( 'Sync Update' ),
     667                ),
     668                'public'             => false,
     669                '_builtin'           => true, /* internal use only. don't use this when registering your own post type. */
     670                'hierarchical'       => false,
     671                'capabilities'       => array(
     672                    'read'                   => 'do_not_allow',
     673                    'read_private_posts'     => 'do_not_allow',
     674                    'create_posts'           => 'do_not_allow',
     675                    'publish_posts'          => 'do_not_allow',
     676                    'edit_posts'             => 'do_not_allow',
     677                    'edit_others_posts'      => 'do_not_allow',
     678                    'edit_published_posts'   => 'do_not_allow',
     679                    'delete_posts'           => 'do_not_allow',
     680                    'delete_others_posts'    => 'do_not_allow',
     681                    'delete_published_posts' => 'do_not_allow',
     682                ),
     683                'map_meta_cap'       => false,
     684                'publicly_queryable' => false,
     685                'query_var'          => false,
     686                'rewrite'            => false,
     687                'show_in_menu'       => false,
     688                'show_in_rest'       => false,
     689                'show_ui'            => false,
     690                'supports'           => array( 'custom-fields' ),
     691            )
     692        );
     693    }
    659694
    660695    register_post_status(
     
    86128647 *
    86138648 * @since 6.3.0 Adds `wp_pattern_sync_status` meta field to the wp_block post type so an unsynced option can be added.
     8649 * @since 7.0.0 Adds `_crdt_document` meta field to post types so that CRDT documents can be persisted.
    86148650 *
    86158651 * @link https://github.com/WordPress/gutenberg/pull/51144
     
    86318667        )
    86328668    );
    8633 }
     8669
     8670    if ( get_option( 'enable_real_time_collaboration' ) ) {
     8671        register_meta(
     8672            'post',
     8673            '_crdt_document',
     8674            array(
     8675                'auth_callback'     => static function ( bool $_allowed, string $_meta_key, int $object_id, int $user_id ): bool {
     8676                    return user_can( $user_id, 'edit_post', $object_id );
     8677                },
     8678                /*
     8679                 * Revisions must be disabled because we always want to preserve
     8680                 * the latest persisted CRDT document, even when a revision is restored.
     8681                 * This ensures that we can continue to apply updates to a shared document
     8682                 * and peers can simply merge the restored revision like any other incoming
     8683                 * update.
     8684                 *
     8685                 * If we want to persist CRDT documents alongside revisions in the
     8686                 * future, we should do so in a separate meta key.
     8687                 */
     8688                'revisions_enabled' => false,
     8689                'show_in_rest'      => true,
     8690                'single'            => true,
     8691                'type'              => 'string',
     8692            )
     8693        );
     8694    }
     8695}
  • trunk/src/wp-includes/rest-api.php

    r61674 r61689  
    429429    $icons_controller = new WP_REST_Icons_Controller();
    430430    $icons_controller->register_routes();
     431
     432    // Collaboration.
     433    if ( get_option( 'enable_real_time_collaboration' ) ) {
     434        $sync_storage = new WP_Sync_Post_Meta_Storage();
     435        $sync_server  = new WP_HTTP_Polling_Sync_Server( $sync_storage );
     436        $sync_server->register_routes();
     437    }
    431438}
    432439
  • trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php

    r61429 r61689  
    233233        $is_draft  = 'draft' === $post->post_status || 'auto-draft' === $post->post_status;
    234234
    235         if ( $is_draft && (int) $post->post_author === $user_id && ! $post_lock ) {
     235        /*
     236         * In the context of real-time collaboration, all peers are effectively
     237         * authors and we don't want to vary behavior based on whether they are the
     238         * original author. Always target an autosave revision.
     239         *
     240         * This avoids the following issue when real-time collaboration is enabled:
     241         *
     242         * - Autosaves from the original author (if they have the post lock) will
     243         *   target the saved post.
     244         *
     245         * - Autosaves from other users are applied to a post revision.
     246         *
     247         * - If any user reloads a post, they load changes from the author's autosave.
     248         *
     249         * - The saved post has now diverged from the persisted CRDT document. The
     250         *   content (and/or title or excerpt) are now "ahead" of the persisted CRDT
     251         *   document.
     252         *
     253         * - When the persisted CRDT document is loaded, a diff is computed against
     254         *   the saved post. This diff is then applied to the in-memory CRDT
     255         *   document, which can lead to duplicate inserts or deletions.
     256         */
     257        $is_collaboration_enabled = get_option( 'enable_real_time_collaboration' );
     258
     259        if ( $is_draft && (int) $post->post_author === $user_id && ! $post_lock && ! $is_collaboration_enabled ) {
    236260            /*
    237261             * Draft posts for the same author: autosaving updates the post and does not create a revision.
  • trunk/src/wp-settings.php

    r61678 r61689  
    301301require ABSPATH . WPINC . '/abilities-api.php';
    302302require ABSPATH . WPINC . '/abilities.php';
     303require ABSPATH . WPINC . '/collaboration/interface-wp-sync-storage.php';
     304require ABSPATH . WPINC . '/collaboration/class-wp-sync-post-meta-storage.php';
     305require ABSPATH . WPINC . '/collaboration/class-wp-http-polling-sync-server.php';
     306require ABSPATH . WPINC . '/collaboration.php';
    303307require ABSPATH . WPINC . '/rest-api.php';
    304308require ABSPATH . WPINC . '/rest-api/class-wp-rest-server.php';
  • trunk/tests/phpunit/tests/rest-api/rest-settings-controller.php

    r61324 r61689  
    120120            'default_comment_status',
    121121            'site_icon', // Registered in wp-includes/blocks/site-logo.php
     122            'enable_real_time_collaboration',
    122123        );
    123124
  • trunk/tests/qunit/fixtures/wp-api-generated.js

    r61674 r61689  
    1108611086                            "required": false
    1108711087                        },
     11088                        "enable_real_time_collaboration": {
     11089                            "title": "",
     11090                            "description": "Enable Real-Time Collaboration",
     11091                            "type": "boolean",
     11092                            "required": false
     11093                        },
    1108811094                        "posts_per_page": {
    1108911095                            "title": "Maximum posts per page",
     
    1454714553    "default_category": 1,
    1454814554    "default_post_format": "0",
     14555    "enable_real_time_collaboration": true,
    1454914556    "posts_per_page": 10,
    1455014557    "show_on_front": "posts",
Note: See TracChangeset for help on using the changeset viewer.