$rule ) { $policy = array( 'default' => ! empty( $rule['default_allow'] ) ? 'allow' : 'deny', 'allow' => array(), 'deny' => array(), ); foreach ( isset( $rule['allow_list'] ) ? (array) $rule['allow_list'] : array() as $route => $allowed ) { $policy[ $allowed ? 'allow' : 'deny' ][] = self::pattern( (string) $route ); } $policy['allow'] = array_values( array_unique( $policy['allow'] ) ); $policy['deny'] = array_values( array_unique( $policy['deny'] ) ); if ( 'none' === $role ) { $settings['guest'] = $policy; } else { $settings['roles'][ sanitize_key( $role ) ] = $policy; } } return $settings; } /** * Turn a registered route regex into our pattern: every named group becomes *. * * @param string $route Route regex, possibly HTML-encoded as Disable REST API stores it. * @return string */ public static function pattern( $route ) { $route = htmlspecialchars_decode( $route ); $route = preg_replace( '/\(\?P<[^>]+>[^)]*\)/', '*', $route ); $route = str_replace( array( '\\.', '\\-', '\\/' ), array( '.', '-', '/' ), (string) $route ); return '/' . ltrim( (string) $route, '/' ); } }