Maybe you can use query_vars
filter and parse_request
action.
add_action('init', 'initInternalWPRewrite', 10);
// Add your rewrite rule, you don't need to create a wordpress page
function initInternalWPRewrite () {
add_rewrite_rule('^diagnostics/?$', 'index.php?diagnostics=1', 'top');
}
add_action('init', 'rewriteRulesCacheInit', 10);
// This method is useful to avoid manual flush rewrite cache
function rewriteRulesCacheInit () {
if (!get_option('rewrite_rules_cache')) {
add_option('rewrite_rules_cache', true);
}
}
// With this method you don't need to flush cache
add_action('init', 'rewriteRulesFlushCache', 20);
function rewriteRulesFlushCache () {
if (get_option('rewrite_rules_cache')) {
flush_rewrite_rules();
delete_option('rewrite_rules_cache');
}
}
// Add your custom query var
add_filter('query_vars', 'queryVars');
function queryVars ($query_vars) {
$query_vars[] = 'diagnostics';
return $query_vars;
}
// Render your PHP content, please, avoid include PHP or if you want to include PHP file, ensure is defined ABSPATH constant to avoid direct execution
// REMEMBER: exit or die, if you don't do this, WordPress will be loaded.
add_action('parse_request', 'renderDiagnosticPage');
function renderDiagnosticPage ($wp_query) {
if (array_key_exists('diagnostics', $wp_query->query_vars)) {
//your code
exit();
}
return;
}
More info:
-
Query Vars filter: https://codex.wordpress.org/Plugin_API/Filter_Reference/query_vars
-
Parse Request action: https://codex.wordpress.org/Plugin_API/Action_Reference/parse_request
- add_rewrite_rule method: https://codex.wordpress.org/Rewrite_API/add_rewrite_rule
Hope this helps you.