Некорректная работа контактной формы в шаблонах Wordpress

Я хотел бы отметить, что я не совсем разработчик, а скорее дизайнер. Я пытаюсь разместить пользовательскую контактную форму в файле шаблона Wordpress. Он работает по принципу, основанному на руководстве, которое находится по адресу Cats Who Code: как создать встроенную контактную форму для вашей темы Wordpress.

Я изменил контактную форму, чтобы иметь следующее:

  • Имя (текстовое поле)
  • Компания (текстовое поле)
  • Адрес (текстовая область)
  • Адрес электронной почты (текстовое поле)
  • Телефон (текстовое поле)
  • Мобильный (текстовое поле)
  • Запрос (текстовая область)

Однако, когда я интегрирую его в пользовательский шаблон и добавляю его в установку Wordpress, он просто дает мне пустую страницу с пустым кодом. Мне интересно, почему это происходит, и когда я удаляю контактную форму из шаблона, все хорошо без контактной формы. Ниже приведен весь код шаблона.

<?php
if(isset($_POST['submitted'])) {
if(trim($_POST['name']) === '') {
    $nameError = 'Please enter your name.';
    $hasError = true;
} else {
    $name = trim($_POST['name']);
}
if(trim($_POST['company']) === '') {
    $companyError = 'Please enter your company name.';
    $hasError = true;
} else {
    $company = trim($_POST['company']);
}
if(trim($_POST['address']) === '') {
    $addressError = 'Please enter your address.';
    $hasError = true;
} else {
    if(function_exists('stripslashes')) {
        $address = stripslashes(trim($_POST['address']));
    } else {
        $address = trim($_POST['address']);
    }
}
    if(trim($_POST['email']) === '')  {
    $emailError = 'Please enter your email address.';
    $hasError = true;
} else if (!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$", trim($_POST['email']))) {
    $emailError = 'You entered an invalid email address.';
    $hasError = true;
} else {
    $email = trim($_POST['email']);
}
if(trim($_POST['telephone']) === '') {
    $telephoneError = 'Please enter your telephone number.';
    $hasError = true;
} else {
    $telephone = trim($_POST['telephone']);
}
if(trim($_POST['mobile']) === '') {
    $mobileError = 'Please enter your mobile phone number.';
    $hasError = true;
} else {
    $mobile = trim($_POST['mobile']);
}
if(trim($_POST['enquiry']) === '') {
    $enquiryError = 'Please enter a message.';
    $hasError = true;
} else {
    if(function_exists('stripslashes')) {
        $enquiry = stripslashes(trim($_POST['enquiry']));
    } else {
        $enquiry = trim($_POST['enquiry']);
    }
}

if(!isset($hasError)) {
    $emailTo = get_option('tz_email');
    if (!isset($emailTo) || ($emailTo == '') ){
        $emailTo = get_option('admin_email');
    }
    $subject = '[Blue Doors] From '.$name;
    $body = "Name: $name \n\nCompany: $company \n\nAddress: $address \n\nEmail: $email \n\nTel: $telephone \n\nMobile: $mobile \n\nDetails of Enquiry: $enquiry";
    $headers = 'From: '.$name.' <'.$emailTo.'>' . "\r\n" . 'Reply-To: ' . $email;

    mail($emailTo, $subject, $body, $headers);
    $emailSent = true;
}
} ?>

<?php get_header(); ?>

<section class="content">
    <?php if(have_posts()) : ?><?php while(have_posts()) : the_post(); ?>

    <header class="content-title">
        <h1><?php the_title(); ?></h1>
    </header>

        <article class="content-body">  
            <?php the_post_thumbnail(); ?>
            <?php the_content(); ?>
        </article>

        <article class="content-body">

        <?php if(isset($emailSent) && $emailSent == true) { ?>
                        <div class="thanks">
                            <p>Thanks, your email was sent successfully.</p>
                        </div>
                        <?php } else { ?>
                        <?php the_content(); ?>
                        <?php if(isset($hasError) || isset($captchaError)) { ?>
                            <p>Sorry, an error occured.<p>
                        <?php } ?>

            <form action="<?php the_permalink(); ?>" id="contactform" method="post">
                <ul>
                    <li>
                        <label>What is your name?</label>
                        <input type="text" name="name" id="name" value="<?php if(isset($_POST['name'])) echo $_POST['name'];?>" class="required"/>
                        <?php if($nameError != '') { ?>
                                <span class="error"><?=$nameError;?></span>
                            <?php } ?>
                    </li>
                    <li>
                        <label>What is your company's name?</label>
                        <input type="text" name="company" id="company" value="<?php if(isset($_POST['company'])) echo $_POST['company'];?>" class="required"/>
                    </li>
                    <li>
                        <label class="address">What is your address?</label>
                        <textarea name="address" id="address" rows="5" cols="30" class="required"><?php if(isset($_POST['address'])) { if(function_exists('stripslashes')) { echo stripslashes($_POST['address']); } else { echo $_POST['address']; } } ?></textarea>
                            <?php if($addressError != '') { ?>
                                <span class="error"><?=$addressError;?></span>
                            <?php } ?>
                    </li>
                    <li>
                        <label>What is your email address?</label>
                        <input type="text" name="email" id="email" value="<?php if(isset($_POST['email'])) echo $_POST['email'];?>" class="required" />
                            <?php if($emailError != '') { ?>
                                <span class="error"><?=$emailError;?></span>
                            <?php } ?>
                    </li>
                    <li>
                        <label>What is your telephone no?</label>
                        <input type="text" name="telephone" id="telephone" value="<?php if(isset($_POST['telephone'])) echo $_POST['telephone'];?>" class="required" />
                            <?php if($nameError != '') { ?>
                                <span class="error"><?=$telephoneError;?></span>
                            <?php } ?>
                    </li>
                    <li>
                        <label>What is your mobile no?</label>
                        <input type="text" name="mobile" id="mobile" value="<?php if(isset($_POST['mobile'])) echo $_POST['mobile'];?>" class="required" />
                            <?php if($mobileError != '') { ?>
                                <span class="error"><?=$mobileError;?></span>
                            <?php } ?>
                    </li>
                    <li>
                        <label>What would you like to discuss about with Blue Doors?</label>
                        <textarea name="enquiry" id="enquiry" rows="8" cols="30" class="required"><?php if(isset($_POST['enquiry'])) { if(function_exists('stripslashes')) { echo stripslashes($_POST['enquiry']); } else { echo $_POST['enquiry']; } } ?></textarea>
                            <?php if($enquiryError != '') { ?>
                                <span class="error"><?=$enquiryError;?></span>
                            <?php } ?>
                    </li>
                    <li>
                        <button type="submit" class="submitbutton">Submit your enquiry</button>
                    </li>
                </ul>
                <input type="hidden" name="submitted" id="submitted" value="true" />
            </form>
        </article>

    <?php endwhile; endif; ?>

</section>

<?php get_sidebar(); ?>

<?php get_footer(); ?>

Я пытаюсь понять, где он ломается, но я не очень хорошо разбираюсь в PHP и не могу его понять. Может ли кто-нибудь указать, где я ошибаюсь, это было бы очень признательно.


person j-mes    schedule 09.05.2012    source источник
comment
Вы добавили свой шаблон на страницу контактов?   -  person Libin    schedule 09.05.2012
comment
Да, я сделал. Он выходил пустым каждый раз, когда я заходил на страницу. Если я удалил форму, страница контактов работает нормально.   -  person j-mes    schedule 09.05.2012
comment
Поместите фиктивный контент на свою страницу контактов через панель управления WordPress и проверьте, отображается ли этот контент.   -  person Libin    schedule 09.05.2012
comment
Я попробовал этот метод, и он отлично работает с абзацем Lorem Ipsum без контактной формы. С контактной формой это пустая страница.   -  person j-mes    schedule 09.05.2012


Ответы (1)


Вы поместили код своей контактной формы в цикл <?php if(have_posts()) : ?><?php while(have_posts()) : the_post(); ?>

Попробуйте поместить весь код контактной формы, начиная с <?php if(isset($emailSent) && $emailSent == true) { ?> до </form>, вне цикла. т.е. поместите эту часть кода после этой строки <?php endwhile; endif; ?>

Надеюсь, это поможет.

ИЗМЕНИТЬ:

Вам не хватает одной фигурной скобки в коде. Обновите приведенную ниже часть кода. Я только добавил еще одну фигурную скобку в последней строке.

<?php if(isset($emailSent) && $emailSent == true) { ?>
                        <div class="thanks">
                            <p>Thanks, your email was sent successfully.</p>
                        </div>
                        <?php } else { ?>
                        <?php the_content(); ?>
                        <?php if(isset($hasError) || isset($captchaError)) { ?>
                            <p>Sorry, an error occured.<p>
                        <?php } } ?>

И это прекрасно работает для меня.

person Libin    schedule 09.05.2012
comment
Я переместил его за пределы цикла, и он все еще вызывает ту же проблему. Ради любопытства, работает ли PHP для формы в заголовке и внутри формы, как предполагалось? - person j-mes; 09.05.2012
comment
да. По крайней мере, форма должна отображаться в браузере. Позвольте мне проверить код PHP. - person Libin; 09.05.2012
comment
Отсутствующий } — это то, чего я бы не увидел. <?php } } ?> Благодаря вашему решению моя контактная форма заработала. Спасибо, что нашли время, чтобы попытаться понять это для меня, @Libin. - person j-mes; 09.05.2012