user roles - Wordpress add_rewrite_rule redirection match GET variable not passing through to custom template

My target: Create a page template in theme (page-expert.php) following the guide PageTemplates.Create a blank page wit

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.

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745618694a4636390.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信