2014-11-06 3 views
0

, что у меня есть форма:WordPress Rewrite на основе формы скрытого поля

<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/путь2/ПгвЬЫат-Lastname получить добавляется к концу url, поэтому я заканчиваю/path1/path2/firstname-lastname. В большинстве случаев я мог бы что-то сделать с правилом перезаписи .htaccess, но это WordPress, поэтому все, что я получаю, это 404. С чего начать? Я вижу некоторые сообщения, которые указывают на изменения в файле functions.php, но я не могу заставить ничего работать.

Ваша помощь очень ценится.

+0

Если вы хотите, чтобы форма для добавления к URL-адресу, изменить метод формы из '' Post' к GET' и этим будет автоматически обрабатываться для вас. –

+0

Когда я использую GET, я в конечном итоге получаю /? Usr = firstname-lastname – Datumpup

+0

Возможно, GET - это путь, но как я могу избавиться? Usr = без получения 404? – Datumpup

ответ

0

Вы можете использовать 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

+0

Не уверен, что я понимаю в контексте моего сообщения. Я изменил имя Фамилия на usr, но я до сих пор не могу добавить переменную usr в конец URL-адреса. – Datumpup

+0

Возможно, я не понимаю вашу проблему ... С моим кодом вы исправляете 404 с помощью пути path1/path2/usr – LTasty

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> 

Все, что я действительно был дать вход идентификатор, поэтому он может быть выбран, добавлен событие onSubmit в тег формы, а затем добавлен тег скрипта с функцией для обработки изменения действия формы.

+0

Просто чтобы быть понятным, это все еще используется POST? – Datumpup

+0

Это зависит от вас. Честно говоря, если у вас есть только одно поле, я лично не буду использовать форму вообще.Я бы просто добавил событие onclick в '', который получает значение от ввода и просто выполняет 'location.href ="/path1/path2/"+ inputBoxValue'. –

+0

Все, что у меня есть, это одно поле. Как это изменит код выше? – Datumpup

0

альтернативный способ ..... вам нужно создать URL-адрес для перенаправления. Проблема с тем, как вы пытаетесь, заключается в том, что wp, очевидно, попытается решить адрес, который вы ему даете. Если вы хотите преодолеть это, вы можете установить правило перезаписи в соответствие с path1/path2 (см. Выше, если ваша страница существует в db или здесь Add "custom page" without page, если вы хотите пропустить запись db)

После того, как вы отсортировали вы можете создать URL-адрес пути1/path2/name и перенаправить его при получении $ _POST или, конечно, снова изменить действие формы на путь1/путь2 и перенаправить на себя оттуда.

<?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 часть вам не нужно

Смежные вопросы