Make WordPress Core

Changeset 52184


Ignore:
Timestamp:
11/16/2021 05:07:43 PM (5 years ago)
Author:
spacedmonkey
Message:

REST API: Remove experimental block menu item types.

The menu items REST API controller was added in [52079]. This included functionality to add a "block" menu item type. This functionality is experimental and not currently used in WordPress core, so should be removed.

Props noisysocks.
See #40878.

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/nav-menu.php

    r52079 r52184  
    407407 * Save the properties of a menu item or create a new one.
    408408 *
    409  * The menu-item-title, menu-item-description, menu-item-attr-title, and menu-item-content are expected
     409 * The menu-item-title, menu-item-description and menu-item-attr-title are expected
    410410 * to be pre-slashed since they are passed directly to APIs that expect slashed data.
    411411 *
    412412 * @since 3.0.0
    413  * @since 5.9.0 Added the menu-item-content parameter.
    414413 *
    415414 * @param int   $menu_id         The ID of the menu. Required. If "0", makes the menu item a draft orphan.
     
    450449                'menu-item-target'        => '',
    451450                'menu-item-classes'       => '',
    452                 'menu-item-content'       => '',
    453451                'menu-item-xfn'           => '',
    454452                'menu-item-status'        => '',
     
    575573        update_post_meta( $menu_item_db_id, '_menu_item_xfn', $args['menu-item-xfn'] );
    576574        update_post_meta( $menu_item_db_id, '_menu_item_url', esc_url_raw( $args['menu-item-url'] ) );
    577         update_post_meta( $menu_item_db_id, '_menu_item_content', $args['menu-item-content'] );
    578575
    579576        if ( 0 == $menu_id ) {
     
    914911                                $menu_item->title = ( '' === $menu_item->post_title ) ? $original_title : $menu_item->post_title;
    915912
    916                         } elseif ( 'block' === $menu_item->type ) {
    917                                 $menu_item->type_label        = __( 'Block' );
    918                                 $menu_item->title             = $menu_item->post_title;
    919                                 $menu_item->menu_item_content = ! isset( $menu_item->menu_item_content ) ? get_post_meta( $menu_item->ID, '_menu_item_content', true ) : $menu_item->menu_item_content;
    920913                        } else {
    921914                                $menu_item->type_label = __( 'Custom Link' );
  • trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php

    r52079 r52184  
    340340                                'menu-item-url'         => $menu_item_obj->url,
    341341                                'menu-item-description' => $menu_item_obj->description,
    342                                 'menu-item-content'     => $menu_item_obj->menu_item_content,
    343342                                'menu-item-attr-title'  => $menu_item_obj->attr_title,
    344343                                'menu-item-target'      => $menu_item_obj->target,
     
    361360                                'menu-item-url'         => '',
    362361                                'menu-item-description' => '',
    363                                 'menu-item-content'     => '',
    364362                                'menu-item-attr-title'  => '',
    365363                                'menu-item-target'      => '',
     
    407405                        } elseif ( ! empty( $request['title']['raw'] ) ) {
    408406                                $prepared_nav_item['menu-item-title'] = $request['title']['raw'];
    409                         }
    410                 }
    411 
    412                 // Nav menu content.
    413                 if ( ! empty( $schema['properties']['content'] ) && isset( $request['content'] ) ) {
    414                         if ( is_string( $request['content'] ) ) {
    415                                 $prepared_nav_item['menu-item-content'] = $request['content'];
    416                         } elseif ( isset( $request['content']['raw'] ) ) {
    417                                 $prepared_nav_item['menu-item-content'] = $request['content']['raw'];
    418407                        }
    419408                }
     
    461450                }
    462451
    463                 // If menu item is type block, then content is required.
    464                 if ( 'block' === $prepared_nav_item['menu-item-type'] && empty( $prepared_nav_item['menu-item-content'] ) ) {
    465                         $error->add( 'rest_content_required', __( 'The content is required when using a block menu item type.' ), array( 'status' => 400 ) );
    466                 }
    467 
    468452                if ( $error->has_errors() ) {
    469453                        return $error;
     
    565549                        // It is stored as a string, but should be exposed as an integer.
    566550                        $data['object_id'] = absint( $menu_item->object_id );
    567                 }
    568 
    569                 if ( rest_is_field_included( 'content', $fields ) ) {
    570                         $data['content'] = array();
    571                 }
    572 
    573                 if ( rest_is_field_included( 'content.raw', $fields ) ) {
    574                         $data['content']['raw'] = $menu_item->menu_item_content;
    575                 }
    576 
    577                 if ( rest_is_field_included( 'content.rendered', $fields ) ) {
    578                         /** This filter is documented in wp-includes/post-template.php */
    579                         $data['content']['rendered'] = apply_filters( 'the_content', $menu_item->menu_item_content );
    580                 }
    581 
    582                 if ( rest_is_field_included( 'content.block_version', $fields ) ) {
    583                         $data['content']['block_version'] = block_version( $menu_item->menu_item_content );
    584551                }
    585552
     
    782749                        'description' => __( 'The family of objects originally represented, such as "post_type" or "taxonomy".' ),
    783750                        'type'        => 'string',
    784                         'enum'        => array( 'taxonomy', 'post_type', 'post_type_archive', 'custom', 'block' ),
     751                        'enum'        => array( 'taxonomy', 'post_type', 'post_type_archive', 'custom' ),
    785752                        'context'     => array( 'view', 'edit', 'embed' ),
    786753                        'default'     => 'custom',
     
    858825                        'minimum'     => 0,
    859826                        'default'     => 0,
    860                 );
    861 
    862                 $schema['properties']['content'] = array(
    863                         'description' => __( 'HTML content to display for this block menu item.' ),
    864                         'context'     => array( 'view', 'edit', 'embed' ),
    865                         'type'        => array( 'string', 'object' ),
    866                         'properties'  => array(
    867                                 'raw'           => array(
    868                                         'description' => __( 'HTML content, as it exists in the database.' ),
    869                                         'type'        => 'string',
    870                                         'context'     => array( 'edit' ),
    871                                 ),
    872                                 'rendered'      => array(
    873                                         'description' => __( 'HTML content, transformed for display.' ),
    874                                         'type'        => 'string',
    875                                         'context'     => array( 'view', 'edit' ),
    876                                         'readonly'    => true,
    877                                 ),
    878                                 'block_version' => array(
    879                                         'description' => __( 'Version of the block format used in the HTML content.' ),
    880                                         'type'        => 'integer',
    881                                         'context'     => array( 'edit' ),
    882                                         'readonly'    => true,
    883                                 ),
    884                         ),
    885827                );
    886828
  • trunk/tests/phpunit/tests/rest-api/wpRestMenuItemsController.php

    r52079 r52184  
    609609
    610610        /**
    611          * Tests that a block menu item can be created.
    612          *
    613          * @ticket 40878
    614          * @covers ::create_item
    615          */
    616         public function test_create_item_block() {
    617                 wp_set_current_user( self::$admin_id );
    618                 $request = new WP_REST_Request( 'POST', '/wp/v2/menu-items' );
    619                 $request->add_header( 'content-type', 'application/x-www-form-urlencoded' );
    620                 $params = $this->set_menu_item_data(
    621                         array(
    622                                 'type'    => 'block',
    623                                 'content' => '<!-- wp:paragraph --><p>Block content</p><!-- /wp:paragraph -->',
    624                         )
    625                 );
    626                 $request->set_body_params( $params );
    627                 $response = rest_get_server()->dispatch( $request );
    628 
    629                 $this->check_create_menu_item_response( $response );
    630         }
    631 
    632         /**
    633          * Tests that a block menu item can be created.
    634          *
    635          * @ticket 40878
    636          * @covers ::create_item
    637          */
    638         public function test_create_item_invalid_block_content() {
    639                 wp_set_current_user( self::$admin_id );
    640                 $request = new WP_REST_Request( 'POST', '/wp/v2/menu-items' );
    641                 $request->add_header( 'content-type', 'application/x-www-form-urlencoded' );
    642                 $params = $this->set_menu_item_data(
    643                         array(
    644                                 'type' => 'block',
    645                         )
    646                 );
    647                 $request->set_body_params( $params );
    648                 $response = rest_get_server()->dispatch( $request );
    649                 $this->assertErrorResponse( 'rest_content_required', $response, 400 );
    650         }
    651 
    652         /**
    653611         * @ticket 40878
    654612         * @covers ::update_item
     
    684642         * @covers ::update_item
    685643         */
    686         public function test_update_item_preserves_type() {
    687                 wp_set_current_user( self::$admin_id );
    688 
    689                 $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/menu-items/%d', $this->menu_item_id ) );
    690                 $request->add_header( 'content-type', 'application/x-www-form-urlencoded' );
    691                 $params = array(
    692                         'status'  => 'draft',
    693                         'type'    => 'block',
    694                         'title'   => 'TEST',
    695                         'content' => '<!-- wp:paragraph --><p>Block content</p><!-- /wp:paragraph -->',
    696                 );
    697                 $request->set_body_params( $params );
    698                 $response = rest_get_server()->dispatch( $request );
    699                 $this->check_update_menu_item_response( $response );
    700                 $new_data = $response->get_data();
    701                 $this->assertSame( 'block', $new_data['type'] );
    702 
    703                 $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/menu-items/%d', $this->menu_item_id ) );
    704                 $request->add_header( 'content-type', 'application/x-www-form-urlencoded' );
    705                 $params = array(
    706                         'status'  => 'draft',
    707                         'title'   => 'TEST2',
    708                         'content' => '<!-- wp:paragraph --><p>Block content</p><!-- /wp:paragraph -->',
    709                 );
    710                 $request->set_body_params( $params );
    711                 $response = rest_get_server()->dispatch( $request );
    712                 $this->check_update_menu_item_response( $response );
    713                 $new_data = $response->get_data();
    714 
    715                 // The type shouldn't change just because it was missing from request args.
    716                 $this->assertSame( 'block', $new_data['type'] );
    717         }
    718 
    719         /**
    720          * @ticket 40878
    721          * @covers ::update_item
    722          */
    723644        public function test_update_item_clean_xfn() {
    724645                wp_set_current_user( self::$admin_id );
     
    826747                $data       = $response->get_data();
    827748                $properties = $data['schema']['properties'];
    828                 $this->assertSame( 19, count( $properties ) );
     749                $this->assertSame( 18, count( $properties ) );
    829750                $this->assertArrayHasKey( 'type_label', $properties );
    830751                $this->assertArrayHasKey( 'attr_title', $properties );
    831752                $this->assertArrayHasKey( 'classes', $properties );
    832753                $this->assertArrayHasKey( 'description', $properties );
    833                 $this->assertArrayHasKey( 'content', $properties );
    834754                $this->assertArrayHasKey( 'id', $properties );
    835755                $this->assertArrayHasKey( 'url', $properties );
     
    958878                }
    959879
    960                 // Check content.
    961                 if ( 'block' === $data['type'] ) {
    962                         $menu_item_content = get_post_meta( $post->ID, '_menu_item_content', true );
    963                         $this->assertSame( apply_filters( 'the_content', $menu_item_content ), $data['content']['rendered'] );
    964                         if ( 'edit' === $context ) {
    965                                 $this->assertSame( $menu_item_content, $data['content']['raw'] );
    966                         } else {
    967                                 $this->assertFalse( isset( $data['title']['raw'] ) );
    968                         }
    969                         $this->assertSame( 1, $data['content']['block_version'] );
    970                 } else {
    971                         $this->assertEmpty( $data['content']['rendered'] );
    972                 }
    973 
    974880                // post_parent.
    975881                $this->assertArrayHasKey( 'parent', $data );
  • trunk/tests/qunit/fixtures/wp-api-generated.js

    r52145 r52184  
    37063706                                "post_type",
    37073707                                "post_type_archive",
    3708                                 "custom",
    3709                                 "block"
     3708                                "custom"
    37103709                            ],
    37113710                            "required": false
     
    37663765                            "type": "integer",
    37673766                            "minimum": 0,
    3768                             "required": false
    3769                         },
    3770                         "content": {
    3771                             "description": "HTML content to display for this block menu item.",
    3772                             "type": [
    3773                                 "string",
    3774                                 "object"
    3775                             ],
    3776                             "properties": {
    3777                                 "raw": {
    3778                                     "description": "HTML content, as it exists in the database.",
    3779                                     "type": "string",
    3780                                     "context": [
    3781                                         "edit"
    3782                                     ]
    3783                                 },
    3784                                 "rendered": {
    3785                                     "description": "HTML content, transformed for display.",
    3786                                     "type": "string",
    3787                                     "context": [
    3788                                         "view",
    3789                                         "edit"
    3790                                     ],
    3791                                     "readonly": true
    3792                                 },
    3793                                 "block_version": {
    3794                                     "description": "Version of the block format used in the HTML content.",
    3795                                     "type": "integer",
    3796                                     "context": [
    3797                                         "edit"
    3798                                     ],
    3799                                     "readonly": true
    3800                                 }
    3801                             },
    38023767                            "required": false
    38033768                        },
     
    39323897                                "post_type",
    39333898                                "post_type_archive",
    3934                                 "custom",
    3935                                 "block"
     3899                                "custom"
    39363900                            ],
    39373901                            "required": false
     
    39883952                            "type": "integer",
    39893953                            "minimum": 0,
    3990                             "required": false
    3991                         },
    3992                         "content": {
    3993                             "description": "HTML content to display for this block menu item.",
    3994                             "type": [
    3995                                 "string",
    3996                                 "object"
    3997                             ],
    3998                             "properties": {
    3999                                 "raw": {
    4000                                     "description": "HTML content, as it exists in the database.",
    4001                                     "type": "string",
    4002                                     "context": [
    4003                                         "edit"
    4004                                     ]
    4005                                 },
    4006                                 "rendered": {
    4007                                     "description": "HTML content, transformed for display.",
    4008                                     "type": "string",
    4009                                     "context": [
    4010                                         "view",
    4011                                         "edit"
    4012                                     ],
    4013                                     "readonly": true
    4014                                 },
    4015                                 "block_version": {
    4016                                     "description": "Version of the block format used in the HTML content.",
    4017                                     "type": "integer",
    4018                                     "context": [
    4019                                         "edit"
    4020                                     ],
    4021                                     "readonly": true
    4022                                 }
    4023                             },
    40243954                            "required": false
    40253955                        },
     
    41584088                                "post_type",
    41594089                                "post_type_archive",
    4160                                 "custom",
    4161                                 "block"
     4090                                "custom"
    41624091                            ],
    41634092                            "required": false
     
    42084137                            "type": "integer",
    42094138                            "minimum": 0,
    4210                             "required": false
    4211                         },
    4212                         "content": {
    4213                             "description": "HTML content to display for this block menu item.",
    4214                             "type": [
    4215                                 "string",
    4216                                 "object"
    4217                             ],
    4218                             "properties": {
    4219                                 "raw": {
    4220                                     "description": "HTML content, as it exists in the database.",
    4221                                     "type": "string",
    4222                                     "context": [
    4223                                         "edit"
    4224                                     ]
    4225                                 },
    4226                                 "rendered": {
    4227                                     "description": "HTML content, transformed for display.",
    4228                                     "type": "string",
    4229                                     "context": [
    4230                                         "view",
    4231                                         "edit"
    4232                                     ],
    4233                                     "readonly": true
    4234                                 },
    4235                                 "block_version": {
    4236                                     "description": "Version of the block format used in the HTML content.",
    4237                                     "type": "integer",
    4238                                     "context": [
    4239                                         "edit"
    4240                                     ],
    4241                                     "readonly": true
    4242                                 }
    4243                             },
    42444139                            "required": false
    42454140                        },
Note: See TracChangeset for help on using the changeset viewer.