使用“name”查询字符串引用表单域而不是页面名

时间:2021-06-26 作者:davidvishal

我正在尝试使用url参数(查询字符串)自动填充表单。问题是,当我使用“name”查询字符串(例如mysite.com/?name=xyz)时,它指的是pagename而不是name表单字段,并显示404错误。

例如,如果我键入mysite。com/?name=david,显示404,但如果我键入mysite。com/?name=关于它转到mysite。com/关于。

为了尝试在我拥有表单的页面上覆盖此内容,我尝试了以下代码:

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\' );
但这不起作用。如果有人能修改我的代码,我将不胜感激。

PS:我需要api集成的名称查询字符串,我知道这可能会破坏permalink结构,但我想尝试一下,看看是否值得权衡

1 个回复
最合适的回答,由SO网友:bosco 整理而成

在处理表格提交时,通常建议将您的表格张贴到a custom AJAX handlerwp-admin/admin-post.php form handler. 如果外部API集成要求您接受name 参数,将此功能设置为REST API 端点或控制器将为您提供对查询变量的完全控制。

也就是说,您可以使用request 筛选以重新映射传入的querystring变量。在这种情况下,我建议重新分配name\'内部对其他事物的价值,以便不破坏任何其他事物或需要任何其他黑客工作。

“Most”;“美丽的permalink”;Per马斯tructs将映射URI/myslugpagename=myslug 查询var键/值。记住,我们可以重新分配name 对于您的页面:

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

相关推荐