Regex in add_rewrite_tag not accepting OR operators?
I am trying to add a custom field to the post permalinks by using a combo of add_rewrite_tag
and applying a post_link
filter.
What I am aiming for is something like this:
http://example.com/%category%/%mycustomfield%/%postname%
I can manage to get the %mycustomfield%
as %psubject%
working by using
add_action( 'init', 'register_rewrite_tag');
function register_rewrite_tag() {
add_rewrite_tag( '%psubject%', '(.*)' );
}
However there are only a set number of %psubject%
values.
But the regex below, which I have tested on regex testers does not work and instead redirects all posts with this link structure to the homepage as home.php
, not even a 404
or index redirect.
add_rewrite_tag( '%psubject%', '(option1|option2|option3)');
However simply having the regex inputs below will work.
(option1) or (.*)
Such as
http://example.com/somecategory/option1/this-is-the-post-title
will show the correct post.
Edit: I have found even in Wordpress 3.6 that this issue still occurs.
It appears that by using the regex OR
operator in the add_rewrite_tag
function only will allow the last option of the OR
statement, but not any before it.
Example:
add_rewrite_tag( '%slugname%', '(orange|apple|strawberry)');
Will only allow 'strawberry', despite the syntax being a standard OR
statement.
This issue does not occur in other Wordpress functions such as add_rewrite_rule
.
Question: How can I tell the rewrite tag to only allow a set number of strings to be accepted for the permalink?
Topic rewrite-tag regex rewrite-rules permalinks Wordpress
Category Web