admin管理员组

文章数量:1025316

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?

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?

Share Improve this question edited Apr 7, 2019 at 8:11 sariDon asked Apr 7, 2019 at 7:58 sariDonsariDon 2651 gold badge2 silver badges18 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 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.

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?

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?

Share Improve this question edited Apr 7, 2019 at 8:11 sariDon asked Apr 7, 2019 at 7:58 sariDonsariDon 2651 gold badge2 silver badges18 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 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.

本文标签: user rolesWordpress addrewriterule redirection match GET variable not passing through to custom template