0

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

3
  • I can't really think of an API integration which would require you to use a specific GET querystring variable for a form submission - could you elaborate on that a bit?
    – bosco
    Commented Jun 26, 2021 at 20:51
  • So the app I'm trying to integrate calls a url with pre-set querystrings every time my listing on the app receives a new lead. One of the pre-set querystrings is name. For example, say John whose contact no is 123 enquired for abc, the app calls mywebsite.com?name=john&phone=123&product=abc. To capture the leads I'm using a form that autosubmits and I need to be able to capture the name as well Commented Jun 26, 2021 at 21:06
  • Gotchya! That's a prime use-case for a custom REST route - they're not too tricky to register, and the REST API interface was designed for data exchange. Since REST routes are not a part of the visual front-end of the site presented to visitors in their browsers, it does not attempt to map incoming query vars into the main query. Would be like mywebsite.com/wp-json/david/v1/webhook-thingy?name=john&phone=123&product=abc
    – bosco
    Commented Jun 26, 2021 at 21:12

1 Answer 1

0

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' );

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.