WP_Rewrite::add_permastruct()publicWP 2.5.0

Adds a new permalink structure.

A permalink structure (permastruct) is an abstract definition of a set of rewrite rules; it is an easy way of expressing a set of regular expressions that rewrite to a set of query strings. The new permastruct is added to the WP_Rewrite::$extra_permastructs array.

When the rewrite rules are built by WP_Rewrite::rewrite_rules(), all of these extra permastructs are passed to WP_Rewrite::generate_rewrite_rules() which transforms them into the regular expressions that many love to hate.

The $args parameter gives you control over how WP_Rewrite::generate_rewrite_rules() works on the new permastruct.

Method of the class: WP_Rewrite{}

No Hooks.

Return

null. Nothing (null).

Usage

global $wp_rewrite;
$wp_rewrite->add_permastruct( $name, $struct, $args );
$name(string) (required)
Name for permalink structure.
$struct(string) (required)
Permalink structure (e.g. category/%category%)
$args(array)

Arguments for building rewrite rules based on the permalink structure.

Default: empty array

  • with_front(true|false)
    Whether the structure should be prepended with WP_Rewrite::$front.
    Default: true

  • ep_mask(int)
    The endpoint mask defining which endpoints are added to the structure. Accepts a mask of:

    • EP_ALL
    • EP_NONE
    • EP_ALL_ARCHIVES
    • EP_ATTACHMENT
    • EP_AUTHORS
    • EP_CATEGORIES
    • EP_COMMENTS
    • EP_DATE
    • EP_DAY
    • EP_MONTH
    • EP_PAGES
    • EP_PERMALINK
    • EP_ROOT
    • EP_SEARCH
    • EP_TAGS
    • EP_YEAR Default EP_NONE.
  • paged(true|false)
    Whether archive pagination rules should be added for the structure.
    Default: true

  • feed(true|false)
    Whether feed rewrite rules should be added for the structure.
    Default: true

  • forcomments(true|false)
    Whether the feed rules should be a query for a comments feed.
    Default: false

  • walk_dirs(true|false)
    Whether the 'directories' making up the structure should be walked over and rewrite rules built for each in-turn.
    Default: true

  • endpoints(true|false)
    Whether endpoints should be applied to the generated rules.
    Default: true

Changelog

Since 2.5.0 Introduced.

WP_Rewrite::add_permastruct() code WP 6.6.2

public function add_permastruct( $name, $struct, $args = array() ) {
	// Back-compat for the old parameters: $with_front and $ep_mask.
	if ( ! is_array( $args ) ) {
		$args = array( 'with_front' => $args );
	}

	if ( func_num_args() === 4 ) {
		$args['ep_mask'] = func_get_arg( 3 );
	}

	$defaults = array(
		'with_front'  => true,
		'ep_mask'     => EP_NONE,
		'paged'       => true,
		'feed'        => true,
		'forcomments' => false,
		'walk_dirs'   => true,
		'endpoints'   => true,
	);

	$args = array_intersect_key( $args, $defaults );
	$args = wp_parse_args( $args, $defaults );

	if ( $args['with_front'] ) {
		$struct = $this->front . $struct;
	} else {
		$struct = $this->root . $struct;
	}

	$args['struct'] = $struct;

	$this->extra_permastructs[ $name ] = $args;
}