Use “name” query string to refer to form field instead of pagename

I’m trying to auto-populate a form using url parameters (query strings). The problem is when I use the “name” query string (eg mysite.com/?name=xyz), it is referring to the pagename instead of the Name form field and showing a 404 error.

For eg, if I type mysite.com/?name=david, it shows 404 but if I type mysite.com/?name=about it goes to mysite.com/about.

To try and override this on the page where I have the form, I tried the following code:

function del_name ($qvar) {
    if ( is_page( 'page-slug' ) ) {
        function is_name( $var ) {
            return $var !== 'name';
        }
        $qvar = array_filter($qvar, 'is_name', ARRAY_FILTER_USE_KEY);
    }
    return $qvar;
}
add_action( 'query_vars', 'del_name' );

But this isn’t working. I’d really appreciate if someone can fix my code.

PS: I need the name query string for an api integration and I understand that this might break the permalink structure but I want to try it out and see if the trade off is worth it

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

When handling form submissions, it would generally be advisable to POST your form to a custom AJAX handler or wp-admin/admin-post.php form handler. If an external API integration requires you to accept the name parameter, setting up this functionality as a REST API endpoint or controller would give you fairly complete control over the query vars.

That said, you can use the request filter to remap incoming querystring variables. In this case, I would recommend reassigning name‘s value to something else internally so as to not break anything else or require any other hacky work-arounds.

Most “pretty permalink” permastructs will map the URI /myslug to the pagename=myslug query var key/value. That in mind, we can re-assign name for your page as such:

function wpse391078_remap_myslug_page_name_var( $qvs ) {
  if( ! empty( $qvs['pagename'] ) && $qvs['pagename'] === 'myslug' ) {
    $qvs['wpse391078_name'] = $qvs['name'];
    unset( $qvs['name'] );
  }

  return $qvs;
}
add_filter( 'request', 'wpse391078_remap_myslug_page_name_var' );


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x