My target:
- Create a page template in theme (page-expert.php) following the guide Page Templates.
- Create a blank page with the template.
- The above page will show the profile information for certain users (by custom role 'expert' created by add roles).
- The default Wordpress link for a profile is http://mysite/author/expert-name. But I want the link http://mysite/writer/expert/[expert-nickname] should show the profile for user roles 'expert' user expert-nickname
It is more or less an implementation of add_rewrite_rule.
What I did:
Template file, role and page (page_id=211, slug=http://[mysite]/writer/expert) is created accordingly.
Redirection managed (through class myExpert initiation in function.php) and permalink settings updated:
class myExpert extends myWriters{
public function __construct(
add_filter('init', array($this, 'set_expert_link_base'));
add_filter("expert_link", array($this, 'fix_expert_link')); //For now, this changes the link of all author profiles. I'll look into it later.
}
function set_expert_link_base()
{
add_rewrite_tag('%expert%', '([^&]+)', 'expert=');
add_rewrite_rule('^expert/([^/]*)?','index.php?page_id=211&expert=$matches[1]','top');
}
function fix_expert_link($link)
{
if($link){
return str_replace("author","expert",$link);
}
}
}
Problem:
When calling http://mysite/writer/expert/[expert-nickname], the redirection to the page is taking place, but the get variable is not getting processed in page-expert.php. The following do not contain any index 'expert'. (Global $wp_query and $wp)
$wp->query_vars
$_REQUEST
$wp_query->query_vars
$exp_slug= get_query_var('expert');
ia blank
add_filter('request', array($this, show_req_vars()));
function show_req_vars($vars)
{
print_r($vars);
return $vars;
}
Outputs:
Array ( [page_id] => 211 )
What am I doing wrong/missing?