The path should just start with wp-content
because the generated rewrite rule (which would be added to your .htaccess
) is relative to your WordPress installation directory:
function addCheckoutRedirect() {
add_rewrite_rule(
\'tradeIns\', // I intentionally removed the caret (^)
\'wp-content/plugins/pluginNake/templates/checkout.php\',
\'top\'
);
}
And here\'s how your .htaccess
file may look like after the addition of the above "non index.php
" rule: (in this example, WordPress is installed in the root directory; hence the RewriteBase
is /
)
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
# WordPress automatically added the caret (^), and the slash (/) before wp-content
RewriteRule ^tradeIns /wp-content/plugins/pluginNake/templates/checkout.php [QSA,L]
...
# END WordPress
Don\'t forget to flush the rewrite rules — just visit the permalink settings page.
Alternate Option
Create a standard Page (post of the page
type), give it the slug tradeIns
and use the page_template
hook to load the checkout.php
page when the tradeIns
page is being requested.
add_filter( \'page_template\', function ( $template ) {
return is_page( \'tradeIns\' )
? \'/full/path/to/plugins/pluginNake/templates/checkout.php\'
: $template;
} );
Using this option gives you the advantage that you don\'t need any custom rewrite rules or the need to set your plugin\'s checkout.php
as a custom Page template.
But the final decision is yours; just use whichever option is best for your specific needs.
Another Option: Completely Dynamic URL
Which means you don\'t need any custom rewrite rules and no need to create any Pages.
And this example uses the parse_request
hook, but you may also use the wp
hook or a similar hook. However, when using the wp
hook (or any hooks where WordPress already sent the headers), you would want to call status_header( 200 );
to announce a 200
HTTP status header. And that is to prevent a "not found"/404
error since the path (tradeIns
in the example below) doesn\'t actually exist (not a WordPress Page, etc.).
add_action( \'parse_request\', function ( $wp ) {
if ( \'tradeIns\' === $wp->request ) { // the request is example.com/tradeIns
//status_header( 200 );
require_once \'/full/path/to/plugins/pluginNake/templates/checkout.php\';
exit;
}
} );