0

これは私がここに投稿した別の質問に関連していますが、それは別の問題であるため、人々が私が二重投稿していると思わないことを願っています.

Wordpress にこんなメールフォームがあります。

html

    <form action="" id="contactForm">
        <input type="text" id="contactName" placeholder="Name:">
        <input type="text" id="contactEmail" placeholder="Email:">
        <select id="form-subject">
          <option>Subject</option>
          <option>Accounts</option>
          <option>Bookkeeping</option>
          <option>Start Up</option>
          <option>CIS Returns</option>
          <option>Payroll</option>
          <option>Self Assessment</option>
          <option>Tax Returns</option>
          <option>VAT Returns</option>
                        <option>Other</option>
        </select>  
        <textarea id="contactMessage" rows="8" cols="40" placeholder="Message:"></textarea>
                    <p id="submit">Submit</p>
                    <div id="status">
          <p></p>
        </div>
    </form>

jquery

    $j('#submit').click(function(){     
        //
        var nameVal = $j('#contactForm #contactName').val();
        var emailVal = $j('#contactForm #contactEmail').val();
        var messageVal = $j('#contactForm #contactMessage').val();

        //
        $j.post('wp-content/code/contactEngine.php', { theName:nameVal, theEmail:emailVal, theMessage:messageVal }, function(data){
            $j("#status p").html(data);
            $j("#status p").show().fadeOut(3500);
            if(data.indexOf('Thank You')==0) {document.forms[0].reset();}
        });
    })

php

    <?php

      $errors = array();
      $required_fields = array('theName','theEmail','theMessage');
      foreach($required_fields as $fieldname){
         if(!isset($_POST[$fieldname]) || empty($_POST[$fieldname])){
            $errors[] = $fieldname;
         }
      }
      if(empty($errors)){
         $name_field = Trim(stripslashes($_POST['theName']));
         $name = explode(' ', $name_field);
         $firstname = ucfirst($name[0]);
         $email_field = Trim(stripslashes($_POST['theEmail']));
         $message = Trim(stripslashes($_POST['theMessage']));
         //
         $to = "info@ttmt.org.uk";
         $subject = "Email from Website";
         $body = "From: $name_field\n E-Mail: $email_field\n Message:\n $message";
         //
         mail($to, $subject, $body);

             //wp_mail($to, $subject, $body);   

         echo "Thank You $firstname";
      }else{
         echo "Please complete all fields.";
      }

    ?>

php は wp-content フォルダー内のフォルダーにあるため、jquery から簡単にアクセスできます。

$j.post('wp-content/code/contactEngine.php', { theName:nameVal, theEmail:emailVal, theMessage:messageVal }, function(data){ 

変数は php に到達し、フォームが完成しているかどうかに応じて返信を返します。

実際のメールは送信されません - PHP の mail() 関数は Worpdress で動作しますか。

wp_mail() 関数を試しましたが、これによりスクリプトが完全に停止し、エコーが得られません。

Contact Form 7 のようなメール プラグインがあることは知っていますが、このサイトでは動作しないと思います。

これは、カスタム投稿タイプの単一ページ サイトです。Contact Form 7 で行う必要があると思われるコンテンツを呼び出していません。

4

3 に答える 3

1

PHP のメール機能は、Wordpress から完全に独立しています。これは組み込みの PHP 関数であり、理論的にはすべてのプラットフォームで動作するはずです。

私の頭に浮かぶ唯一のことは、サーバー構成の問題です。ホスティングがメール機能をブロックしているか、正しく設定されていない可能性があります。

この例がスタンドアロン ファイル ( http://php.net/manual/en/function.mail.php )で機能するかどうかを確認します。

<?php
    $to      = 'nobody@example.com';
    $subject = 'the subject';
    $message = 'hello';
    $headers = 'From: webmaster@example.com' . "\r\n" .
    'Reply-To: webmaster@example.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

    mail($to, $subject, $message, $headers);
?> 
于 2013-03-21T11:14:55.753 に答える
0

同様の問題を解決しようとしました。それを機能させる可能性のあるものには、次のものがあります。

  1. この例 (または同様のもの)に従ってコードを構成してください。実際に効果があるかどうかはわかりません。

  2. この例のフォームを含め、ヘッダーを提供してみてください。

    $headers = array('From: From someone <some@one.com>'. "\r\n",'Content-Type: text/html; charset=UTF-8');

  3. 空の変数をメッセージ、件名、またはヘッダーに入れないでください - 空の文字列などで初期化してください ->$myvar='';

  4. 件名にマルチバイト文字などが含まれている場合は、こちらを確認してください。

于 2014-05-21T10:24:03.753 に答える