最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

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

programmeradmin13浏览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?

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.

发布评论

评论列表(0)

  1. 暂无评论