Где я могу добавить свои файлы обработчика форм PHP в WordPress? - PullRequest
0 голосов
/ 11 апреля 2019

Я работаю с 2 формами HTML. Первая - это «Форма контакта», которая содержит 3 поля: Имя контакта, Название компании и Электронная почта. При нажатии кнопки «Отправить» в «Контактной форме» мне отправляется электронное письмо со входом и загружается «Форма запроса», которая включает 3 поля из «Контактной формы» и некоторые дополнительные поля, которые пользователь должен заполнить. , Когда нажимают кнопку «Отправить» в «Форме предложения», мне отправляется второе электронное письмо со всеми входными данными, и пользователю отправляется благодарственное письмо. Это дает мне 3 файла для работы: contactform.html, contactformhandler.php и quoteformhandler.php.

Вот проблема:

Я добавил «contactform.html» в текстовый виджет на новой странице в WordPress, которая содержала шаблон веб-страницы. Это сработало, поэтому я смог увидеть контактную форму на сайте WordPress, но когда я нажал «Отправить», меня перенаправили на страницу с ошибкой.

Мне нужно выяснить, куда добавить мои файлы «contactformhandler.php» и «quoteformhandler.php», поэтому, когда я нажимаю «Подтвердить», ввод проверяется.

Я попытался создать другую страницу на сайте WordPress и добавить код php в текстовый виджет, как я сделал для файла .html, но это не сработало. При нажатии кнопки «Отправить» на странице одновременно отображались «form1» и «form2».

Затем я попытался обработать вещи на стороне FTP. Я сбросил свои обработчики форм .php в cPanel. Это тоже не решило проблему. Форма и обработчик формы связывались друг с другом, но вместо загрузки формы цитирования внутри шаблона WordPress файл .php загружался сам по себе.

<?php
// define variables and set to empty values
$errorCount = "";

$bizNameErr = $bizTypeErr = $address1Err = $address2Err = $cityErr = $stateErr
= $zipErr = $sqftErr = $cNameErr = $emailErr = "";

$bizName = $bizType = $address1 = $address2 = $city = $state
= $zip = $sqft = $cName = $email = "";

// Checks to make sure the required fields from the Contact Form are not empty
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (empty($_POST["bizName"])) {
    $bizNameErr = "Business name is required";
    ++$errorCount;
  } else {
    $bizName = test_input($_POST["bizName"]);
  } 
  if (empty($_POST["cName"])) {
    $cNameErr = "Contact Name is required";
    ++$errorCount;
  } else {
    $cName = test_input($_POST["cName"]);
  }
  if (empty($_POST["email"])) {
    $emailErr = "Email is required";
    ++$errorCount;
  } else {
    $email = test_input($_POST["email"]);
  }
}

// Form validation
function test_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
// This function, when called, redisplays the Contact Form
function redisplayForm($bizName, $cName, $email, $bizNameErr, $cNameErr, $emailErr ) { ?>
    <form name="Contact Form Handler" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
    <div class="form-embed">
        <span class="error"> <?php
// Determining that the user input was sent successfully and setting a resultMsg variable accordingly
            if (isset($result)) {
                $resultMsg = "Your infomation was sent successfully.";
            } else {
                $resultMsg = "There was a problem sending your information.";
            }
            echo $resultMsg; ?>
        </span><br><br>
        <span class="error">Please re-enter the information below. <br><br> * required field</span>
        <div class="bodyText"><p style="text-align: center;">
            <span style="font-family: 'times new roman', times; font-size: 18px; color: #00ccff;">
            <strong><span style="font-size: 24px;"><em>Looking For A Quote</em>
            </span>?&nbsp;</strong></span>
        </div>
        <br><br>    
        <label for="bizName" class="control-label">Business Name:
        <span class="error">* <?php echo $bizNameErr;?> </span></label>
        <input required maxlength="200" type="text" class="form-control" value="<?php echo $bizName; ?>" placeholder="Enter Business Name" name="bizName" id="bizName"  />
        <label for="cName" class="control-label">Contact Name:
        <span class="error">* <?php echo $cNameErr;?></span></label>
        <input required maxlength="200" type="text" class="form-control" value="<?php echo $cName; ?>" placeholder="Enter Contact Name" name="cName" id="cName" />
        <label for="email" class="control-label">Email Address: 
        <span class="error">* <?php echo $emailErr;?></span></label>
        <input required maxlength="200" type="email" class="form-control" value="<?php echo $email; ?>" placeholder="Enter Email Address" name="email" id="email"  />
        <br>
        <div class="buttons">
            <input type="submit" name="Submit" value="Send Form"  /> 
        </div>
    </div>
    </form>
// This function, when called, displays the Quote Form
function redisplayForm2($bizName, $bizType, $address1, $address2, $city, 
$state, $zip, $sqft, $cName, $email, $bizNameErr, $bizTypeErr,
$address1Err, $cityErr, $stateErr, $zipErr, $sqftErr, $cNameErr, $emailErr ) { ?>
    <form name="Quote Form" method="post" action="quoteformhandler.php">
    <div class="form-embed">
        <div class="bodyText"><p style="text-align: center;">
            <span style="font-family: 'times new roman', times; font-size: 18px; color: #00ccff;">
            <strong><span style="font-size: 24px;"><em>Looking For A Quote</em>
            </span>?&nbsp;</strong></span>
        </div><br><br>
        <label for="bizName" class="control-label">Business Name:</label>
        <input required maxlength="200" type="text" class="form-control" value="<?php echo $bizName ?>" name="bizName" id="bizName" />
        <label for="cName" class="control-label">Contact Name:</label>
        <input required maxlength="200" type="text" class="form-control" value="<?php echo $cName ?>" name="cName" id="cName"  />
        <label for="email" class="control-label">Email Address:</label>
        <input required maxlength="200" type="email" class="form-control" value="<?php echo $email ?>" name="email" id="email"  />
        <label for="bizType" class="control-label">Business Type:</label>   
        <select required name="bizType">
            <option value=""disabled selected hidden>Choose business type...</option>
            <option value="Restaurant">Restaurant</option>
            <option value="Bar or Pub">Bar or Pub</option>
            <option value="Brewery">Brewery</option>
            <option value="Wedding Venue">Wedding Venue</option>
            <option value="Salon or Spa">Salon or Spa</option>
            <option value="Event or Party Space">Event or Party Space</option>
            <option value="Funeral Home">Funeral Home</option>
            <option value="Retail">Retail</option>
            <option value="Museum or Gallery">Museum or Gallery</option>
            <option value="Industrial Facility">Industrial Facility</option>
            <option value="Medical Facility">Medical Facility</option>
            <option value="Commercial Property">Commercial Property</option>
            <option value="Fitness Facility / Gym">Fitness Facility / Gym</option>
            <option value="Sports or Recreational Facility ">Sports or Recreational Facility </option>
            <option value="Other">Other</option>
        </select>
        <label for="address1" class="control-label">Address Line 1:</label>
        <input required type="text" name="address1" id="address1"
        size="40" placeholder="Street and number, P.O. box, c/o">
        <label for="address2" class="control-label">Address Line 2:
        <input type="text" name="address2" id="address2"
        size="40" placeholder = "Apartment, suite, unit, building, floor, ect."> 
        <label for="city" class="control-label">City:</label>
        <input required type="text" class="form-control" placeholder="Enter City" name="city" id="city" />
        <label for="state" class="control-label">State:</label> 
        <select required name="state">
            <option value="" disabled selected hidden>Choose state...</option>
            <option value="AL">Alabama (AL)</option>
            <option value="AK">Alaska (AK)</option>
            <option value="AZ">Arizona (AZ)</option>
            <option value="AR">Arkansas (AR)</option>
            <option value="CA">California (CA)</option>
            <option value="CO">Colorado (CO)</option>
            <option value="CT">Connecticut (CT)</option>
            <option value="DE">Delaware (DE)</option>
            <option value="DC">District Of Columbia (DC)</option>
            <option value="FL">Florida (FL)</option>
            <option value="GA">Georgia (GA)</option>
            <option value="HI">Hawaii (HI)</option>
            <option value="ID">Idaho (ID)</option>
            <option value="IL">Illinois (IL)</option>
            <option value="IN">Indiana (IN)</option>
            <option value="IA">Iowa (IA)</option>
            <option value="KS">Kansas (KS)</option>
            <option value="KY">Kentucky (KY)</option>
            <option value="LA">Louisiana (LA)</option>
            <option value="ME">Maine (ME)</option>
            <option value="MD">Maryland (MD)</option>
            <option value="MA">Massachusetts (MA)</option>
            <option value="MI">Michigan (MI)</option>
            <option value="MN">Minnesota (MN)</option>
            <option value="MS">Mississippi (MS)</option>
            <option value="MO">Missouri (MO)</option>
            <option value="MT">Montana (MT)</option>
            <option value="NE">Nebraska (NE)</option>
            <option value="NV">Nevada (NV)</option>
            <option value="NH">New Hampshire (NH)</option>
            <option value="NJ">New Jersey (NJ)</option>
            <option value="NM">New Mexico (NM)</option>
            <option value="NY">New York (NY)</option>
            <option value="NC">North Carolina (NC)</option>
            <option value="ND">North Dakota (ND)</option>
            <option value="OH">Ohio (OH)</option>
            <option value="OK">Oklahoma (OK)</option>
            <option value="OR">Oregon (OR)</option>
            <option value="PA">Pennsylvania (PA)</option>
            <option value="RI">Rhode Island (RI)</option>
            <option value="SC">South Carolina (SC)</option>
            <option value="SD">South Dakota (SD)</option>
            <option value="TN">Tennessee (TN)</option>
            <option value="TX">Texas (TX)</option>
            <option value="UT">Utah (UT)</option>
            <option value="VT">Vermont (VT)</option>
            <option value="VA">Virginia (VA)</option>
            <option value="WA">Washington (WA)</option>
            <option value="WV">West Virginia (WV)</option>
            <option value="WI">Wisconsin (WI)</option>
            <option value="WY">Wyoming (WY)</option>
        </select>
        <label for="zip" class="control-label">Zip Code:</label>
        <input required type="text" class="form-control" 
        pattern="[0-9]{5}" maxlength="5" size="5" 
        placeholder="Enter Zip Code" name="zip" id="zip" />
        <label for="sqft" class="control-label">Estimated Square Feet:</label>
        <select required name="sqft" >
            <option value="" disabled selected hidden>Choose square footage...</option>
            <option value="4,000 or less">4,000 sqft or less</option>
            <option value="5,000 to 9,000">5,000 sqft to 9,000 sqft</option>
            <option value="10,000 to 14,000">10,000 sqft to 14,000 sqft</option>
            <option value="15,000 to 20,000">15,000 sqft to 20,000 sqft</option>
            <option value="20,000 or more">20,000 sqft or more</option>
        </select>
        <br>
        <div class="buttons">
            <input type="submit" name="Submit" value="Send Form"  /> 
        </div>
    </div>
    </form>
`````````````````````````````````````````````
`````````````````````````````````````````````
<?php
}
// Error checking. 
// If there are errors, call the redisplayForm function to redisplay the Contact Form.
if ($errorCount>0 || $errorCount<0) {
    redisplayForm($bizName, $cName, $email, $bizNameErr, $cNameErr, $emailErr);

    $bizNameErr = $cNameErr = $emailErr = "";

    $bizName = $cName = $email = "";
// If there are no errors, an email will be sent to Conversion Worx with the user's input
// and the redisplayForm2 function will be called to display the Quote Form.
} else {    
    $To = "myemail";
    $Subject = "Contact Form Results";
    $Message = "Business Name: " . $bizName . "\n" 
    . "Contact Name: " . $cName . "\n"
    . "Email Address: " . $email;
    $result = mail($To, $Subject, $Message);

    redisplayForm2($bizName, $bizType, $address1, $address2, $city, 
    $state, $zip, $sqft, $cName, $email, $bizNameErr, $bizTypeErr,
    $address1Err, $cityErr, $stateErr, $zipErr, $sqftErr, $cNameErr, $emailErr );

    $bizNameErr = $bizTypeErr = $address1Err = $address2Err = $cityErr = $stateErr
    = $zipErr = $sqftErr = $cNameErr = $emailErr = "";

    $bizType = $address1 = $address2 = $city = $state
    = $zip = $sqft = "";
} 
?>

1 Ответ

0 голосов
/ 11 апреля 2019

Есть много способов сделать это с Wordpress. Вы можете сделать это с помощью плагина. Контактная форма 7 отлично. Вы можете использовать плагин для создания формы, а затем использовать плагин для обработки данных.

В качестве альтернативы вы можете установить форму для отправки в admin-ajax.php, а затем обработать ее обработкой wp_ajax_my_action.

Самым простым способом, основанным на вашем коде, вероятно, будет продолжение этой строки:

Затем я попытался обработать вещи на стороне FTP. Я сбросил свои обработчики форм .php в cPanel. Это тоже не решило проблему. Форма и обработчик формы связывались друг с другом, но вместо загрузки формы цитирования внутри шаблона WordPress файл .php загружался сам по себе.

В частности, загрузите файл contactformhandler.php, отправьте сообщение формы в этот файл, а затем установите перенаправление в конце обработки на вторую страницу, которую вы хотите загрузить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...