equal
deleted
inserted
replaced
231 // Note that a ID of less than one indicates a nav_menu not yet inserted. |
231 // Note that a ID of less than one indicates a nav_menu not yet inserted. |
232 if ( $this->post_id > 0 ) { |
232 if ( $this->post_id > 0 ) { |
233 $post = get_post( $this->post_id ); |
233 $post = get_post( $this->post_id ); |
234 if ( $post && self::POST_TYPE === $post->post_type ) { |
234 if ( $post && self::POST_TYPE === $post->post_type ) { |
235 $is_title_empty = empty( $post->post_title ); |
235 $is_title_empty = empty( $post->post_title ); |
236 $value = (array) wp_setup_nav_menu_item( $post ); |
236 $value = (array) wp_setup_nav_menu_item( $post ); |
237 if ( $is_title_empty ) { |
237 if ( $is_title_empty ) { |
238 $value['title'] = ''; |
238 $value['title'] = ''; |
239 } |
239 } |
240 } |
240 } |
241 } |
241 } |
350 if ( ! isset( $this->value['original_title'] ) ) { |
350 if ( ! isset( $this->value['original_title'] ) ) { |
351 $this->value['original_title'] = $this->get_original_title( (object) $this->value ); |
351 $this->value['original_title'] = $this->get_original_title( (object) $this->value ); |
352 } |
352 } |
353 |
353 |
354 if ( ! isset( $this->value['nav_menu_term_id'] ) && $this->post_id > 0 ) { |
354 if ( ! isset( $this->value['nav_menu_term_id'] ) && $this->post_id > 0 ) { |
355 $menus = wp_get_post_terms( $this->post_id, WP_Customize_Nav_Menu_Setting::TAXONOMY, array( |
355 $menus = wp_get_post_terms( |
356 'fields' => 'ids', |
356 $this->post_id, |
357 ) ); |
357 WP_Customize_Nav_Menu_Setting::TAXONOMY, |
|
358 array( |
|
359 'fields' => 'ids', |
|
360 ) |
|
361 ); |
358 if ( ! empty( $menus ) ) { |
362 if ( ! empty( $menus ) ) { |
359 $this->value['nav_menu_term_id'] = array_shift( $menus ); |
363 $this->value['nav_menu_term_id'] = array_shift( $menus ); |
360 } else { |
364 } else { |
361 $this->value['nav_menu_term_id'] = 0; |
365 $this->value['nav_menu_term_id'] = 0; |
362 } |
366 } |
377 $this->value['title'] = ''; |
381 $this->value['title'] = ''; |
378 } |
382 } |
379 |
383 |
380 if ( ! isset( $this->value['_invalid'] ) ) { |
384 if ( ! isset( $this->value['_invalid'] ) ) { |
381 $this->value['_invalid'] = false; |
385 $this->value['_invalid'] = false; |
382 $is_known_invalid = ( |
386 $is_known_invalid = ( |
383 ( ( 'post_type' === $this->value['type'] || 'post_type_archive' === $this->value['type'] ) && ! post_type_exists( $this->value['object'] ) ) |
387 ( ( 'post_type' === $this->value['type'] || 'post_type_archive' === $this->value['type'] ) && ! post_type_exists( $this->value['object'] ) ) |
384 || |
388 || |
385 ( 'taxonomy' === $this->value['type'] && ! taxonomy_exists( $this->value['object'] ) ) |
389 ( 'taxonomy' === $this->value['type'] && ! taxonomy_exists( $this->value['object'] ) ) |
386 ); |
390 ); |
387 if ( $is_known_invalid ) { |
391 if ( $is_known_invalid ) { |
433 public function preview() { |
437 public function preview() { |
434 if ( $this->is_previewed ) { |
438 if ( $this->is_previewed ) { |
435 return false; |
439 return false; |
436 } |
440 } |
437 |
441 |
438 $undefined = new stdClass(); |
442 $undefined = new stdClass(); |
439 $is_placeholder = ( $this->post_id < 0 ); |
443 $is_placeholder = ( $this->post_id < 0 ); |
440 $is_dirty = ( $undefined !== $this->post_value( $undefined ) ); |
444 $is_dirty = ( $undefined !== $this->post_value( $undefined ) ); |
441 if ( ! $is_placeholder && ! $is_dirty ) { |
445 if ( ! $is_placeholder && ! $is_dirty ) { |
442 return false; |
446 return false; |
443 } |
447 } |
444 |
448 |
445 $this->is_previewed = true; |
449 $this->is_previewed = true; |
464 * |
468 * |
465 * @since 4.3.0 |
469 * @since 4.3.0 |
466 * |
470 * |
467 * @see wp_get_nav_menu_items() |
471 * @see wp_get_nav_menu_items() |
468 * |
472 * |
469 * @param array $items An array of menu item post objects. |
473 * @param WP_Post[] $items An array of menu item post objects. |
470 * @param object $menu The menu object. |
474 * @param WP_Term $menu The menu object. |
471 * @param array $args An array of arguments used to retrieve menu item objects. |
475 * @param array $args An array of arguments used to retrieve menu item objects. |
472 * @return array Array of menu items, |
476 * @return WP_Post[] Array of menu item objects. |
473 */ |
477 */ |
474 public function filter_wp_get_nav_menu_items( $items, $menu, $args ) { |
478 public function filter_wp_get_nav_menu_items( $items, $menu, $args ) { |
475 $this_item = $this->value(); |
479 $this_item = $this->value(); |
476 $current_nav_menu_term_id = $this_item['nav_menu_term_id']; |
480 $current_nav_menu_term_id = $this_item['nav_menu_term_id']; |
477 unset( $this_item['nav_menu_term_id'] ); |
481 unset( $this_item['nav_menu_term_id'] ); |
478 |
482 |
479 $should_filter = ( |
483 $should_filter = ( |
480 $menu->term_id === $this->original_nav_menu_term_id |
484 $menu->term_id === $this->original_nav_menu_term_id |
505 } |
509 } |
506 } |
510 } |
507 return $filtered_items; |
511 return $filtered_items; |
508 } |
512 } |
509 |
513 |
510 $mutated = false; |
514 $mutated = false; |
511 $should_update = ( |
515 $should_update = ( |
512 is_array( $this_item ) |
516 is_array( $this_item ) |
513 && |
517 && |
514 $current_nav_menu_term_id === $menu->term_id |
518 $current_nav_menu_term_id === $menu->term_id |
515 ); |
519 ); |
534 |
538 |
535 /** |
539 /** |
536 * Re-apply the tail logic also applied on $items by wp_get_nav_menu_items(). |
540 * Re-apply the tail logic also applied on $items by wp_get_nav_menu_items(). |
537 * |
541 * |
538 * @since 4.3.0 |
542 * @since 4.3.0 |
539 * @static |
|
540 * |
543 * |
541 * @see wp_get_nav_menu_items() |
544 * @see wp_get_nav_menu_items() |
542 * |
545 * |
543 * @param array $items An array of menu item post objects. |
546 * @param WP_Post[] $items An array of menu item post objects. |
544 * @param object $menu The menu object. |
547 * @param WP_Term $menu The menu object. |
545 * @param array $args An array of arguments used to retrieve menu item objects. |
548 * @param array $args An array of arguments used to retrieve menu item objects. |
546 * @return array Array of menu items, |
549 * @return WP_Post[] Array of menu item objects. |
547 */ |
550 */ |
548 public static function sort_wp_get_nav_menu_items( $items, $menu, $args ) { |
551 public static function sort_wp_get_nav_menu_items( $items, $menu, $args ) { |
549 // @todo We should probably re-apply some constraints imposed by $args. |
552 // @todo We should probably re-apply some constraints imposed by $args. |
550 unset( $args['include'] ); |
553 unset( $args['include'] ); |
551 |
554 |
553 if ( ! is_admin() ) { |
556 if ( ! is_admin() ) { |
554 $items = array_filter( $items, '_is_valid_nav_menu_item' ); |
557 $items = array_filter( $items, '_is_valid_nav_menu_item' ); |
555 } |
558 } |
556 |
559 |
557 if ( ARRAY_A === $args['output'] ) { |
560 if ( ARRAY_A === $args['output'] ) { |
558 $items = wp_list_sort( $items, array( |
561 $items = wp_list_sort( |
559 $args['output_key'] => 'ASC', |
562 $items, |
560 ) ); |
563 array( |
561 $i = 1; |
564 $args['output_key'] => 'ASC', |
|
565 ) |
|
566 ); |
|
567 $i = 1; |
562 |
568 |
563 foreach ( $items as $k => $item ) { |
569 foreach ( $items as $k => $item ) { |
564 $items[ $k ]->{$args['output_key']} = $i++; |
570 $items[ $k ]->{$args['output_key']} = $i++; |
565 } |
571 } |
566 } |
572 } |
580 unset( $item->nav_menu_term_id ); |
586 unset( $item->nav_menu_term_id ); |
581 |
587 |
582 $item->post_status = $item->status; |
588 $item->post_status = $item->status; |
583 unset( $item->status ); |
589 unset( $item->status ); |
584 |
590 |
585 $item->post_type = 'nav_menu_item'; |
591 $item->post_type = 'nav_menu_item'; |
586 $item->menu_order = $item->position; |
592 $item->menu_order = $item->position; |
587 unset( $item->position ); |
593 unset( $item->position ); |
588 |
594 |
589 if ( empty( $item->original_title ) ) { |
595 if ( empty( $item->original_title ) ) { |
590 $item->original_title = $this->get_original_title( $item ); |
596 $item->original_title = $this->get_original_title( $item ); |
594 } |
600 } |
595 if ( $item->title ) { |
601 if ( $item->title ) { |
596 $item->post_title = $item->title; |
602 $item->post_title = $item->title; |
597 } |
603 } |
598 |
604 |
599 $item->ID = $this->post_id; |
605 $item->ID = $this->post_id; |
600 $item->db_id = $this->post_id; |
606 $item->db_id = $this->post_id; |
601 $post = new WP_Post( (object) $item ); |
607 $post = new WP_Post( (object) $item ); |
602 |
608 |
603 if ( empty( $post->post_author ) ) { |
609 if ( empty( $post->post_author ) ) { |
604 $post->post_author = get_current_user_id(); |
610 $post->post_author = get_current_user_id(); |
605 } |
611 } |
606 |
612 |
653 // Invalid. |
659 // Invalid. |
654 if ( ! is_array( $menu_item_value ) ) { |
660 if ( ! is_array( $menu_item_value ) ) { |
655 return null; |
661 return null; |
656 } |
662 } |
657 |
663 |
658 $default = array( |
664 $default = array( |
659 'object_id' => 0, |
665 'object_id' => 0, |
660 'object' => '', |
666 'object' => '', |
661 'menu_item_parent' => 0, |
667 'menu_item_parent' => 0, |
662 'position' => 0, |
668 'position' => 0, |
663 'type' => 'custom', |
669 'type' => 'custom', |
671 'status' => 'publish', |
677 'status' => 'publish', |
672 'original_title' => '', |
678 'original_title' => '', |
673 'nav_menu_term_id' => 0, |
679 'nav_menu_term_id' => 0, |
674 '_invalid' => false, |
680 '_invalid' => false, |
675 ); |
681 ); |
676 $menu_item_value = array_merge( $default, $menu_item_value ); |
682 $menu_item_value = array_merge( $default, $menu_item_value ); |
677 $menu_item_value = wp_array_slice_assoc( $menu_item_value, array_keys( $default ) ); |
683 $menu_item_value = wp_array_slice_assoc( $menu_item_value, array_keys( $default ) ); |
678 $menu_item_value['position'] = intval( $menu_item_value['position'] ); |
684 $menu_item_value['position'] = intval( $menu_item_value['position'] ); |
679 |
685 |
680 foreach ( array( 'object_id', 'menu_item_parent', 'nav_menu_term_id' ) as $key ) { |
686 foreach ( array( 'object_id', 'menu_item_parent', 'nav_menu_term_id' ) as $key ) { |
681 // Note we need to allow negative-integer IDs for previewed objects not inserted yet. |
687 // Note we need to allow negative-integer IDs for previewed objects not inserted yet. |
682 $menu_item_value[ $key ] = intval( $menu_item_value[ $key ] ); |
688 $menu_item_value[ $key ] = intval( $menu_item_value[ $key ] ); |
847 wp_slash( $menu_item_data ) |
853 wp_slash( $menu_item_data ) |
848 ); |
854 ); |
849 |
855 |
850 if ( is_wp_error( $r ) ) { |
856 if ( is_wp_error( $r ) ) { |
851 $this->update_status = 'error'; |
857 $this->update_status = 'error'; |
852 $this->update_error = $r; |
858 $this->update_error = $r; |
853 } else { |
859 } else { |
854 if ( $is_placeholder ) { |
860 if ( $is_placeholder ) { |
855 $this->previous_post_id = $this->post_id; |
861 $this->previous_post_id = $this->post_id; |
856 $this->post_id = $r; |
862 $this->post_id = $r; |
857 $this->update_status = 'inserted'; |
863 $this->update_status = 'inserted'; |
858 } else { |
864 } else { |
859 $this->update_status = 'updated'; |
865 $this->update_status = 'updated'; |
860 } |
866 } |
861 } |
867 } |
862 } |
868 } |