2014-11-06 44 views
0

我有什么是一种形式:WordPress的重写

<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> 

我想一旦表单被提交到/路径1 /路径/名字,姓氏得到附加的结束url,所以我以/ path1/path2/firstname-lastname结束。在大多数情况下,我可以使用.htaccess重写规则来做一些事情,但这是WordPress,所以我只能得到404。我应该从哪里开始?我看到一些指向functions.php文件中的变化的帖子,但我似乎无法得到任何工作。

非常感谢您的帮助。

+0

如果你想要的形式附加到URL中的一部分,形式方法从'POST'改变'GET'它会自动为你处理。 – 2014-11-06 18:16:20

+0

当我使用GET时,我最终得到/?usr = firstname -namename – Datumpup 2014-11-06 18:44:35

+0

也许GET是要走的路 - 但我该如何摆脱?usr =没有得到404? – Datumpup 2014-11-06 19:22:35

回答

0

可以使用WP的add_rewrite_rule(http://codex.wordpress.org/Rewrite_API/add_rewrite_rule

例子:

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

您在页面中使用$ wp_query-> query_vars [“nameSurname”]获取参数 – LTasty 2014-11-06 18:25:07

+0

不知道我在我的文章的上下文中理解。我已将nameSurname更改为usr,但我仍然无法将usr变量追加到url的末尾。 – Datumpup 2014-11-06 18:40:36

+0

也许我不明白你的问题...用我的代码你修复404路径path1/path2/usr – LTasty 2014-11-06 18:59:26

0

下面是使用香草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> 

所有我真的是给输入可以选择一个id,将onSubmit事件添加到表单标记中,然后添加带有函数的脚本标记以处理更改表单操作。

+0

只需要清楚,这仍然使用POST正确? – Datumpup 2014-11-06 21:02:26

+0

这取决于你。坦率地说,如果你只有一个领域,我个人根本不会使用一个表格。我只是将一个onclick事件添加到'',它从输入获取值,并简单地执行'location.href =“/ path1/path2 /”+ inputBoxValue'。 – 2014-11-06 21:20:02

+0

我只有一个领域。这是如何改变上面的代码? – Datumpup 2014-11-06 21:35:10

0

另一种方式.....你需要建立一个url重定向到。你尝试的方式的问题是wp显然会尝试并解决你给它的地址。如果你想克服这个问题,你可以设置一个重写规则来匹配path1/path2(如果你的页面存在于数据库中,请参阅上面的定义答案,如果你想跳过数据库条目,这里是Add "custom page" without page

一旦你有了那个排序你可以建立url path1/path2/name并在收到$ _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> 

可以使用$_SERVER['REQUEST_URI']拉URL和str_replace函数你不需要