Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 基于表单隐藏字段的WordPress重写_Php_Wordpress_.htaccess - Fatal编程技术网

Php 基于表单隐藏字段的WordPress重写

Php 基于表单隐藏字段的WordPress重写,php,wordpress,.htaccess,Php,Wordpress,.htaccess,我有一张表格: <form method="POST" action="/path1/path2/"> <input type="hidden" name="usr" value="firstname-lastname"> <input type="image" src="/pathtoimage/image.jpg" alt="Submit Form" /> </form> 我想要的是,一旦表单提交到/path1/path2/firstna

我有一张表格:

<form method="POST" action="/path1/path2/">
<input type="hidden" name="usr" value="firstname-lastname">
<input type="image" src="/pathtoimage/image.jpg" alt="Submit Form" />
</form>

我想要的是,一旦表单提交到/path1/path2/firstname lastname,就会将其附加到url的末尾,因此我会以/path1/path2/firstname lastname结束。在大多数情况下,我可以用.htaccess重写规则来做一些事情,但这是WordPress,所以我得到的只是404。我应该从哪里开始?我看到一些帖子指向functions.php文件中的更改,但我似乎什么都做不到


非常感谢您的帮助。

您可以使用WP()的添加重写规则

例如:

function wptuts_add_rewrite_rules() {
    add_rewrite_rule('^path-1/path-2/([^/]*)?$','index.php?page_id=PAGE_ID&nameSurname=$matches[1]','top');
    flush_rewrite_rules();
}
add_action( 'init', 'wptuts_add_rewrite_rules' );

function add_query_vars($aVars) {
    $aVars[] = "nameSurname"; 
    return $aVars;
}

add_filter('query_vars', 'add_query_vars');

下面是一个使用vanilla javascript的简单示例:

<script type="text/javascript">
function changeAction(form){
    //get the value from the input
    var fl = document.getElementById("usr").value;
    //add the input to the action
    frm.action = "/path1/path2/" + fl;
}
</script>

<form method="POST" action="/path1/path2/" onSubmit="changeAction(this);">
<input type="hidden" name="usr" id="usr" value="firstname-lastname">
<input type="image" src="/pathtoimage/image.jpg" alt="Submit Form" />
</form>

功能更改动作(表格){
//从输入中获取值
var fl=document.getElementById(“usr”).value;
//将输入添加到操作
frm.action=“/path1/path2/”+fl;
}

我所做的只是给输入一个id,这样就可以选择它,将onSubmit事件添加到表单标记,然后添加脚本标记,并使用函数来处理更改表单操作。

另一种方法……您需要构建一个url以重定向到。您尝试的方式存在的问题是,wp显然会尝试解决您给出的地址。如果要克服此问题,可以设置重写规则以匹配path1/path2(如果您的页面存在于数据库中,请参阅上面的ltasty答案,如果您要跳过数据库条目,请参阅此处)

排序完成后,您可以构建url path1/path2/name并在收到$\u POST时重定向到它,或者您当然可以再次将表单操作更改为path1/path2并从那里重定向到自身

<?php
if($_POST):
  $name=sanitize_text_field($_POST['usr']);
  $url= get_site_url().'/path1/path2?name='.$name;// using query var method..change if you decide to use the rewrite rule. 
  wp_redirect($url);
  exit();
endif;

?>
<form method="POST" action="#">
<input type="hidden" name="usr" value="firstname-lastname">
<input type="image" src="/pathtoimage/image.jpg" alt="Submit Form" />
</form>


如果希望表单附加到url,可以使用
$\u SERVER['REQUEST\u URI']
拉取url并替换不需要的部分,将表单方法从
POST
更改为
GET
,它将自动为您处理。当我使用GET时,我最终会得到/?usr=firstname lastname也许GET是一种方法-但是我如何摆脱?usr=而不获得404?您需要使用javascript并更改表单操作,以便表单以您想要的格式提交。你通常会添加一个onSubmit事件,然后对其进行更改。谢谢Jonathan,你有没有我可以尝试的代码或示例的链接?你可以使用$wp_query->query_vars[“nameurname”]在页面中获取参数,我不确定在我的文章上下文中是否理解。我已将nameSurname更改为usr,但仍然没有将usr变量附加到url的末尾。也许我不理解您的问题。。。使用我的代码,您可以使用路径path1/path2/usrMy修复404。原始代码不需要对functions.php文件进行任何更改。帖子被发送到一个模板,我在模板中使用$\u POST['usr']来获取我需要在模板中显示的内容。我需要的是$\u POST['usr']变量,该变量将被附加到url中,而不需要获取404。这取决于您。老实说,如果你只有一个字段,我个人根本不会使用表单。我只需将onclick事件添加到一个
中,该事件从输入中获取值,并简单地执行
location.href=“/path1/path2/”+inputBoxValue
。我所拥有的只是一个字段。这会如何改变上面的代码?我刚刚意识到这是一个隐藏的表单字段,所以它甚至不会显示给用户。有没有理由不显示一个
并将其作为链接?没有理由需要隐藏它,或者,正如您所提到的,一个表单。让我重新表述一下这个问题:我有一个链接-。我只想传递usr变量,但删除url的?usr=部分,因此我最终使用/path1/path2/fname lname。我仍然需要能够使用usr变量,并且链接位于处理usr变量的同一页面上。谢谢你迄今为止的帮助。哦,这是WordPress so/?usr=工作,但/fname lname会导致404。