role_names ); // Alpha sort roles by label. asort( $display_roles ); if ( ! $display_roles ) { return; } ?> post_value() ) { return null; } $unsanitized_post_value = $setting->manager->unsanitized_post_values()[ $setting->id ]; return isset( $unsanitized_post_value['display_mode'] ) ? $unsanitized_post_value['display_mode'] : 'show'; } /** * Get posted value for a setting's roles. * * @param WP_Customize_Nav_Menu_Item_Setting $setting Setting. * * @return array|string|null Roles value or null if no posted value present. */ function get_roles_post_data( WP_Customize_Nav_Menu_Item_Setting $setting ) { if ( ! $setting->post_value() ) { return null; } $unsanitized_post_value = $setting->manager->unsanitized_post_values()[ $setting->id ]; return isset( $unsanitized_post_value['roles'] ) ? $unsanitized_post_value['roles'] : ''; } /** * Preview changes to the nav menu item roles. * * Note the unimplemented to-do in the doc block for the setting's preview method. * * @see WP_Customize_Nav_Menu_Item_Setting::preview() * * @param WP_Customize_Nav_Menu_Item_Setting $setting Setting. */ function preview_nav_menu_setting_postmeta( WP_Customize_Nav_Menu_Item_Setting $setting ) { $mode = get_display_mode_post_data( $setting ); if ( null !== $mode ) { $mode = Nav_Menu_Roles()->sanitize_meta_mode( $mode ); add_filter( 'get_post_metadata', static function ( $value, $object_id, $meta_key ) use ( $setting, $mode ) { if ( $object_id === $setting->post_id && '_nav_menu_role_display_mode' === $meta_key ) { return array( $mode ); } return $value; }, 10, 3 ); } $roles = get_roles_post_data( $setting ); if ( null !== $roles ) { $roles = Nav_Menu_Roles()->sanitize_meta( $roles ); add_filter( 'get_post_metadata', static function ( $value, $object_id, $meta_key ) use ( $setting, $roles ) { if ( $object_id === $setting->post_id && '_nav_menu_role' === $meta_key ) { return array( $roles ); } return $value; }, 10, 3 ); } } /** * Save changes to the nav menu item roles. * * Note the unimplemented to-do in the doc block for the setting's preview method. * * @see WP_Customize_Nav_Menu_Item_Setting::update() * * @param WP_Customize_Nav_Menu_Item_Setting $setting Setting. */ function save_nav_menu_setting_postmeta( WP_Customize_Nav_Menu_Item_Setting $setting ) { $mode = get_display_mode_post_data( $setting ); if ( null !== $mode ) { update_post_meta( $setting->post_id, '_nav_menu_role_display_mode', $mode ); } $roles = get_roles_post_data( $setting ); if ( null !== $roles ) { update_post_meta( $setting->post_id, '_nav_menu_role', $roles ); } } // Set up previewing. function customizer_preview( WP_Customize_Manager $wp_customize ) { if ( $wp_customize->settings_previewed() ) { foreach ( $wp_customize->settings() as $setting ) { if ( $setting instanceof WP_Customize_Nav_Menu_Item_Setting ) { preview_nav_menu_setting_postmeta( $setting ); } } } } /** * Set up saving. */ function customizer_save( WP_Customize_Manager $wp_customize ) { foreach ( $wp_customize->settings() as $setting ) { if ( $setting instanceof WP_Customize_Nav_Menu_Item_Setting && $setting->check_capabilities() ) { save_nav_menu_setting_postmeta( $setting ); } } }