wordpress add_rewrite_rule() not showing expected page

371 views Asked by At

I am trying to use the wordpress rewrite rule to configure routing for a plugin that I am developing. I am calling the code from within a class I have created for my plugin - the code that I am using is:

function __construct() {
    add_action('init', array($this, 'category_rewrite_rule'), 10, 0);
}

function category_rewrite_rule() {
    add_rewrite_rule(
        '^products/([^/]*)/?',
        'index.php?category=$matches[1]',
        'top'
    );
}

It should take an url like domainname.com/products/garden and display /index.php?category=garden, but at the moment it displays the home page for the site. If I navigate directly to /index.php?category=garden I can see the expected page.

I know the code is running, as I have other functions within the class that work ok, also I can put die() within the rewrite function which works as expected.

I have been pressing save on the WP Settings -> Permalinks page to refresh the links every time I have changed my code.

I was thinking that it maybe an issue that I have with my local dev environment; I am working on a Mac using Laravel Valet, and I also noticed that I do not have a .htaccess file in the site root folder. I tried manually creating one (using the default WP code) but it has not helped.

EDIT: This afternoon I setup a Wordpress website using Laravel Forge and installed my plugin on that, but I am still encountering the same issue, so perhaps it is not the server environment after all :(

EDIT 2: I have setup a LAMP stack on a VM and the code works, so it is definitely something to do with using Laravel Valet/Forge (Nginx).

Is anyone able to help?

Thanks

1

There are 1 answers

0
the_peacock On BEST ANSWER

As suspected in my edits, the issue was because my local and first test server were using Laravel Valet and Laravel Forge (respectively).

I realised this was the issue as the code worked as expected when I tried using a LAMP stack on a VM.

So in the end I realised that I had to manually add the rewrite rules to my Nginx configuration to get them to work as it is not possible to use Wordpress' add_rewrite_rule function when your server is using Nginx.