0

My target:

  1. Create a page template in theme (page-expert.php) following the guide Page Templates.
  2. Create a blank page with the template.
  3. The above page will show the profile information for certain users (by custom role 'expert' created by add roles).
  4. 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)

  1. $wp->query_vars
  2. $_REQUEST
  3. $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?

1

Remove $query parameter from add_rewrite_tag. Your rewrite tag registration will look like this: add_rewrite_tag('%expert%', '([^&]+)');.

The phrase in the rewrite rule may be '^expert/([^/]+)/?', but it was not the reason for the problem.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.