you have a little error in the call of add_rewrite_rule
with an extra slash before index.php
.
with this correction, your system works without a CPT like data
. you can try that :
add_action('init', function () {
add_rewrite_rule(
'^data/([a-z0-9-]+)/([a-z0-9-]+)/([a-z0-9-]+)/?$',
'index.php?data_type=$matches[1]&data_action=$matches[2]&data_post_id=$matches[3]',
'top'
);
});
add_action("template_redirect", function () {
$data = [];
foreach (["data_type", "data_action", "data_post_id"] as $key) {
$data[$key] = $GLOBALS["wp_query"]->query_vars[$key] ?? "";
}
if ( in_array($data["data_type"], ["neighborhood", "project", "property"])
&& in_array($data["data_action"], ["add", "edit", "delete"])
) {
// special handling
status_header(200);
$template_file = "...";
require $template_file;
exit();
}
});
function wpse_data_management_query_vars( $vars ) {
$vars[] = 'data_type';
$vars[] = 'data_action';
$vars[] = 'data_post_id';
return $vars;
}
add_filter( 'query_vars', 'wpse_data_management_query_vars' );