最新消息:Welcome to the puzzle paradise for programmers! Here, a well-designed puzzle awaits you. From code logic puzzles to algorithmic challenges, each level is closely centered on the programmer's expertise and skills. Whether you're a novice programmer or an experienced tech guru, you'll find your own challenges on this site. In the process of solving puzzles, you can not only exercise your thinking skills, but also deepen your understanding and application of programming knowledge. Come to start this puzzle journey full of wisdom and challenges, with many programmers to compete with each other and show your programming wisdom! Translated with DeepL.com (free version)

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

matteradmin8PV0评论

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.

Post a comment

comment list (0)

  1. No comments so far