self::MAX_ENTRIES ) { return null; } $normalized = array(); foreach ( $order as $slug ) { if ( ! is_string( $slug ) || '' === $slug || self::MAX_SLUG_LENGTH < strlen( $slug ) ) { return null; } if ( trim( $slug ) !== $slug || 1 !== preg_match( '//u', $slug ) || preg_match( '/[\x00-\x1F\x7F]/u', $slug ) ) { return null; } if ( function_exists( 'wp_check_invalid_utf8' ) && wp_check_invalid_utf8( $slug, true ) !== $slug ) { return null; } if ( ! in_array( $slug, $normalized, true ) ) { $normalized[] = $slug; } } return $normalized; } /** * Fail-safely merges a saved slug list with the currently available order. * * @param mixed $saved_order Stored AdminGrip order. * @param array $current_order Current WordPress/plugin order. * @return array */ public static function merge( $saved_order, $current_order ) { if ( ! is_array( $current_order ) ) { return $current_order; } $normalized = self::normalize_order( $saved_order ); if ( null === $normalized || empty( $normalized ) ) { return $current_order; } $merged = array(); foreach ( $normalized as $slug ) { if ( in_array( $slug, $current_order, true ) && ! in_array( $slug, $merged, true ) ) { $merged[] = $slug; } } foreach ( $current_order as $slug ) { if ( ! in_array( $slug, $merged, true ) ) { $merged[] = $slug; } } return $merged; } }