WordPress.org

Make WordPress Core

Ticket #52189: 52189.1.diff

File 52189.1.diff, 6.6 KB (added by jmdodd, 3 months ago)

Updated patch (now using wp_resolve_post_date) with unit tests for menu date values.

  • src/wp-includes/nav-menu.php

     
    436436        }
    437437
    438438        $defaults = array(
    439                 'menu-item-db-id'       => $menu_item_db_id,
    440                 'menu-item-object-id'   => 0,
    441                 'menu-item-object'      => '',
    442                 'menu-item-parent-id'   => 0,
    443                 'menu-item-position'    => 0,
    444                 'menu-item-type'        => 'custom',
    445                 'menu-item-title'       => '',
    446                 'menu-item-url'         => '',
    447                 'menu-item-description' => '',
    448                 'menu-item-attr-title'  => '',
    449                 'menu-item-target'      => '',
    450                 'menu-item-classes'     => '',
    451                 'menu-item-xfn'         => '',
    452                 'menu-item-status'      => '',
     439                'menu-item-db-id'         => $menu_item_db_id,
     440                'menu-item-object-id'     => 0,
     441                'menu-item-object'        => '',
     442                'menu-item-parent-id'     => 0,
     443                'menu-item-position'      => 0,
     444                'menu-item-type'          => 'custom',
     445                'menu-item-title'         => '',
     446                'menu-item-url'           => '',
     447                'menu-item-description'   => '',
     448                'menu-item-attr-title'    => '',
     449                'menu-item-target'        => '',
     450                'menu-item-classes'       => '',
     451                'menu-item-xfn'           => '',
     452                'menu-item-status'        => '',
     453                'menu-item-post-date'     => '',
     454                'menu-item-post-date-gmt' => '',
    453455        );
    454456
    455457        $args = wp_parse_args( $menu_item_data, $defaults );
     
    513515                'post_type'    => 'nav_menu_item',
    514516        );
    515517
     518        $post_date = wp_resolve_post_date( $args['menu-item-post-date'], $args['menu-item-post-date-gmt'] );
     519        if ( $post_date ) {
     520                $post['post_date'] = $post_date;
     521        }
     522
    516523        $update = 0 != $menu_item_db_id;
    517524
    518525        // New menu item. Default is draft status.
  • tests/phpunit/tests/post/nav-menu.php

     
    992992                $category_item = get_post( $category_item_id );
    993993                $this->assertEmpty( $category_item->post_title );
    994994        }
     995
     996        /**
     997         * Test passed post_date/post_date_gmt.
     998         *
     999         * When inserting a nav menu item, it should be possible to set the post_date
     1000         * of it to ensure that this data is maintained during an import.
     1001         *
     1002         * @ticket 52189
     1003         */
     1004        function test_wp_update_nav_menu_item_with_post_date() {
     1005                $post_date     = '2020-12-28 11:26:35';
     1006                $post_date_gmt = '2020-12-29 10:11:45';
     1007                $invalid_date  = '2020-12-41 14:15:27';
     1008
     1009                $post_id = self::factory()->post->create(
     1010                        array(
     1011                                'post_status' => 'publish',
     1012                        )
     1013                );
     1014
     1015                $menu_item_id = wp_update_nav_menu_item(
     1016                        $this->menu_id,
     1017                        0,
     1018                        array(
     1019                                'menu-item-type'      => 'post_type',
     1020                                'menu-item-object'    => 'post',
     1021                                'menu-item-object-id' => $post_id,
     1022                                'menu-item-status'    => 'publish',
     1023                        )
     1024                );
     1025                $post = get_post( $menu_item_id );
     1026                $this->assertEqualsWithDelta( strtotime( date( 'Y-m-d H:i:s' ) ), strtotime( $post->post_date ), 2, 'The dates should be equal' );
     1027
     1028                $menu_item_id = wp_update_nav_menu_item(
     1029                        $this->menu_id,
     1030                        0,
     1031                        array(
     1032                                'menu-item-type'          => 'post_type',
     1033                                'menu-item-object'        => 'post',
     1034                                'menu-item-object-id'     => $post_id,
     1035                                'menu-item-status'        => 'publish',
     1036                                'menu-item-post-date-gmt' => $post_date_gmt,
     1037                        )
     1038                );
     1039                $post = get_post( $menu_item_id );
     1040                $this->assertEquals( get_date_from_gmt( $post_date_gmt ), $post->post_date );
     1041
     1042                $menu_item_id = wp_update_nav_menu_item(
     1043                        $this->menu_id,
     1044                        0,
     1045                        array(
     1046                                'menu-item-type'          => 'post_type',
     1047                                'menu-item-object'        => 'post',
     1048                                'menu-item-object-id'     => $post_id,
     1049                                'menu-item-status'        => 'publish',
     1050                                'menu-item-post-date-gmt' => $invalid_date,
     1051                        )
     1052                );
     1053                $post = get_post( $menu_item_id );
     1054                $this->assertEquals( '1970-01-01 00:00:00', $post->post_date );
     1055
     1056                $menu_item_id = wp_update_nav_menu_item(
     1057                        $this->menu_id,
     1058                        0,
     1059                        array(
     1060                                'menu-item-type'      => 'post_type',
     1061                                'menu-item-object'    => 'post',
     1062                                'menu-item-object-id' => $post_id,
     1063                                'menu-item-status'    => 'publish',
     1064                                'menu-item-post-date' => $post_date,
     1065                        )
     1066                );
     1067                $post = get_post( $menu_item_id );
     1068                $this->assertEquals( $post_date, $post->post_date );
     1069
     1070                $menu_item_id = wp_update_nav_menu_item(
     1071                        $this->menu_id,
     1072                        0,
     1073                        array(
     1074                                'menu-item-type'          => 'post_type',
     1075                                'menu-item-object'        => 'post',
     1076                                'menu-item-object-id'     => $post_id,
     1077                                'menu-item-status'        => 'publish',
     1078                                'menu-item-post-date'     => $post_date,
     1079                                'menu-item-post-date-gmt' => $post_date_gmt,
     1080                        )
     1081                );
     1082                $post = get_post( $menu_item_id );
     1083                $this->assertEquals( $post_date, $post->post_date );
     1084
     1085                $menu_item_id = wp_update_nav_menu_item(
     1086                        $this->menu_id,
     1087                        0,
     1088                        array(
     1089                                'menu-item-type'          => 'post_type',
     1090                                'menu-item-object'        => 'post',
     1091                                'menu-item-object-id'     => $post_id,
     1092                                'menu-item-status'        => 'publish',
     1093                                'menu-item-post-date'     => $post_date,
     1094                                'menu-item-post-date-gmt' => $invalid_date,
     1095                        )
     1096                );
     1097                $post = get_post( $menu_item_id );
     1098                $this->assertEquals( $post_date, $post->post_date );
     1099
     1100                $menu_item_id = wp_update_nav_menu_item(
     1101                        $this->menu_id,
     1102                        0,
     1103                        array(
     1104                                'menu-item-type'      => 'post_type',
     1105                                'menu-item-object'    => 'post',
     1106                                'menu-item-object-id' => $post_id,
     1107                                'menu-item-status'    => 'publish',
     1108                                'menu-item-post-date' => $invalid_date,
     1109                        )
     1110                );
     1111                $post = get_post( $menu_item_id );
     1112                $this->assertEqualsWithDelta( strtotime( date( 'Y-m-d H:i:s' ) ), strtotime( $post->post_date ), 2, 'The dates should be equal' );
     1113
     1114                $menu_item_id = wp_update_nav_menu_item(
     1115                        $this->menu_id,
     1116                        0,
     1117                        array(
     1118                                'menu-item-type'          => 'post_type',
     1119                                'menu-item-object'        => 'post',
     1120                                'menu-item-object-id'     => $post_id,
     1121                                'menu-item-status'        => 'publish',
     1122                                'menu-item-post-date'     => $invalid_date,
     1123                                'menu-item-post-date-gmt' => $post_date_gmt,
     1124                        )
     1125                );
     1126                $post = get_post( $menu_item_id );
     1127                $this->assertEqualsWithDelta( strtotime( date( 'Y-m-d H:i:s' ) ), strtotime( $post->post_date ), 2, 'The dates should be equal' );
     1128
     1129                $menu_item_id = wp_update_nav_menu_item(
     1130                        $this->menu_id,
     1131                        0,
     1132                        array(
     1133                                'menu-item-type'          => 'post_type',
     1134                                'menu-item-object'        => 'post',
     1135                                'menu-item-object-id'     => $post_id,
     1136                                'menu-item-status'        => 'publish',
     1137                                'menu-item-post-date'     => $invalid_date,
     1138                                'menu-item-post-date-gmt' => $invalid_date,
     1139                        )
     1140                );
     1141                $post = get_post( $menu_item_id );
     1142                $this->assertEqualsWithDelta( strtotime( date( 'Y-m-d H:i:s' ) ), strtotime( $post->post_date ), 2, 'The dates should be equal' );
     1143        }
    9951144}