Базовая форма в шаблоне WordPress

#php #wordpress #forms

Вопрос:

Мне нужно просто перевести поисковый запрос из a form в переменную. Я настроил базовый form в файле шаблона, этот файл шаблона затем связан со страницей администратора WordPress. Проблема, с которой я сталкиваюсь, заключается в том, что form он не отправляется, поэтому я не могу использовать переменную. Если я удалю get_header(); из шаблона, то форма будет отправлена, но, очевидно, это нарушит работу wordpress.

Вот моя анкета:

 <form action="<?php the_permalink(); ?>" method="post" autocomplete="off" >
    
      <label>
        <input placeholder="Search…" name="qcsearch" type="text">
      </label>  

      <input type="submit" name="submit" value="Submit">

  </ul>
</form>
 

Я попытался исключить действие, используя имя шаблона, которое является qccerts.php и используя $_SERVER['PHP_SELF']

Вот что я пытаюсь сделать с выводом:

 if(isset($_POST['submit'])){   
  $searchterm = $_POST["qcsearch"];
}else{
  $searchterm = '';
}
 

Это в основном простой поиск, который сообщает пользователям, есть ли файл по имени, которое они ищут. Поэтому мне нужно заполнить $searchterm его, чтобы я мог использовать его позже на странице.

Любая помощь будет признательна.

Комментарии:

1. Пожалуйста, поделитесь более подробной информацией — что вы подразумеваете под «форма не отправляется»?

2. Извините, я не уверен. Я нажимаю кнопку «Отправить», и когда я повторяю запрос $searchterm, ничего не отображается. Когда я удаляю wp_header, он показывает

3. Что вы пытались сделать, чтобы решить эту проблему? Если вы сбрасываете $_POST , что в этом содержится?

4. Я только что попробовал print_r($_POST) и var_dump($_POST), но они пусты. Это странно, потому что, если я удалил wp_header, он работает, поэтому форма должна работать, но какая-то вещь WordPress останавливает ее

5. Возможно, вы захотите попробовать добавить enctype="multipart/form-data" в качестве атрибута в <form> тег

Ответ №1:

Трудно определить, в чем именно заключается ваша проблема, без воспроизводимого сценария. Например, не видя вашей проблемы, я не уверен, действительно ли form она вообще не отправлена или отправлена, но вы не видели, как она выполнялась, или есть какой-то Javascript, который препятствует отправке вашей формы. Существует вероятность того, что форма также отправлена на неправильное действие.

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

 function storeSearchTerm($searchTerm) {
    $_SESSION["searchterm"] = $searchTerm;
}

function getSearchTerm() {
    return isset($_SESSION["searchterm"]) ? $_SESSION["searchterm"] : "";
}
 

Вызывая эти функции, вы можете управлять поисковым запросом, инициализируя его с помощью storeSearchTerm($_POST["qcsearch"]) или что-то в этом роде.

Что касается вашей фактической формы, если она не работает, то вы можете submit ввести форму Javascript , например

 document.getElementById("myForm").submit();
 

и убедитесь, что это запускается либо с помощью onclick атрибута, либо click с помощью прослушивателя событий на кнопке, созданной с помощью addEventListener .

Редактировать

Оказывается, имя класса было неправильно сформировано (проблема с учетом регистра).

Комментарии:

1. Привет, мне не нужно хранить результат на разных страницах. Его используют только в качестве быстрого инструмента, чтобы показать, есть ли что-то, с чем можно продолжить. Я посмотрю на javascript

2. @snookian вы заглянули на вкладку «Сеть» ваших инструментов разработчика в браузере? Если вы нажмете на кнопку отправить, появится ли новая запись в таблице?

3. Не знаю, как читать инструменты разработчика, но, похоже, никаких новых записей не появляется. Выдергиваю волосы из-за этого. Потому что, если я удалил get_header(); или wp_head из заголовка, он работает, так что его ovo как-то связано с wordpress

4. «Не знаю, как читать инструменты разработчика» — вот главная проблема. Если бы вы знали, как это читать, то было бы намного легче определить, в чем заключаются проблемы. Итак, на вашем месте я бы сначала очень тщательно научился использовать инструменты разработчика и только потом вернулся к вопросу, вооружившись этими знаниями. Вы не можете сражаться с драконом с помощью соломинки. Вам нужно надлежащее оборудование.

5. лол…спасибо… Оказывается, название класса вызывало проблему, поэтому я изменил его, и все это сработало.