The add_permastruct() WordPress PHP function adds a new permalink structure to your WordPress site.
Usage
Let’s say we want to add a new permalink structure for a custom post type ‘book’. Here is how you would do it:
add_permastruct('book', '/book/%book%');
In this example, ‘/book/%book%’ is the new permalink structure, where ‘%book%’ is the placeholder for the book name.
Parameters
- $name (string) (Required): This is the name for the permalink structure.
- $struct (string) (Required): This is the actual permalink structure.
- $args (array) (Optional): This array includes arguments for building the rules from the permalink structure. Here are the options you can pass in the $args array:
- with_front (bool): If true, the structure will be prepended with WP_Rewrite::$front. Default is true.
- ep_mask (int): The endpoint mask defining which endpoints are added to the structure. Default is EP_NONE.
- paged (bool): If true, archive pagination rules will be added for the structure. Default is true.
- feed (bool): If true, feed rewrite rules will be added for the structure. Default is true.
- forcomments (bool): If true, the feed rules will query for a comments feed. Default is false.
- walk_dirs (bool): If true, the directories making up the structure will be walked over and rewrite rules built for each. Default is true.
- endpoints (bool): If true, endpoints will be applied to the generated rules. Default is true.
More information
See WordPress Developer Resources: add_permastruct()
Examples
Changing Permalink Structure
global $wp_rewrite; $args = array( 'with_front' => true, 'ep_mask' => 3, 'paged' => 1, 'feed' => 1, 'forcomments' => 0, 'walk_dirs' => 1, 'endpoints' => 1 ); add_permastruct('locations', 'test/%message/', $args);
This changes the permalink structure from ‘/locations/%k7_locations%’ to ‘/test/%message%’.
Adding Custom Permalink Structure
add_action('init', 'wpdocs_custom_permalink'); function wpdocs_custom_permalinks() { add_permastruct('legal', 'legal/%my_slug%', ['ep_mask' => EP_PERMALINK]); add_rewrite_tag('%my_slug%', '([^/]+)', "post_type=page&name="); }
This adds a custom permalink structure ‘/legal/%my_slug%’ where ‘%my_slug%’ is a placeholder for the actual slug.
Adding a Permalink Structure for a Custom Post Type
add_permastruct('book', '/book/%book%');
This adds a new permalink structure for a custom post type ‘book’. The ‘%book%’ is the placeholder for the book name.
Adding a Permalink Structure with Pagination
$args = array( 'paged' => true, 'endpoints' => true ); add_permastruct('news', '/news/%post_id%/', $args);
This adds a new permalink structure ‘/news/%post_id%/’ with pagination enabled.