web-dev-qa-db-ja.com

複数の添付ファイルを含むワードプレスでEメールを送信する方法

私のプラグインには、ユーザーが複数のファイルをアップロードできるcontact usフォームがあり、それはwp-contents/uploads/2014/10フォルダーにアップロードされます。アップロードは機能していますが、このアップロードされたファイルと入力されたユーザーデータを電子メールで管理者に送信する必要があります。添付ファイル付きのメールを送信する方法がわかりません。

これまでに試したコードは次のとおりです。

if(isset($_POST['Save'])){
 /* store post user data to variables */
 if (!function_exists('wp_handle_upload'))
        require_once( ABSPATH . 'wp-admin/includes/file.php' );
       $files = $_FILES['my_files'];
         $upload_overrides = array('test_form' => false);
foreach ($files['name'] as $key => $value) {
  if ($files['name'][$key]) {
    $file = array(
      'name'     => $files['name'][$key],
      'type'     => $files['type'][$key],
      'tmp_name' => $files['tmp_name'][$key],
      'error'    => $files['error'][$key],
      'size'     => $files['size'][$key]
    );
    $movefile = wp_handle_upload($file, $upload_overrides);
     $url[] = $movefile['url'];
  }
}

$to  = '[email protected]';
    $subject = 'Contact Us';
    $message =" Haiii";

  $headers[] = 'From: '.get_option( 'blogname' ).' <[email protected]>';
    add_filter( 'wp_mail_content_type', 'my_custom_email_content_type' );
    if(wp_mail( $to, $subject, $message, $headers, $url ))
    echo 'Mail send';
    else
     echo 'Failed';
function my_custom_email_content_type() {
    return 'text/html';
}

これはどんなメールも送信しませんまたエラーを示します

警告:call_user_func_array()はパラメータ1が有効なコールバックであること、関数 'my_custom_email_content_type'が見つからないこと、または無効な関数名であることを想定しています

この問題を解決するための提案はありますか?

1
Zammuuz

それがあなたのすべての問題を解決するかどうかわからないが、:

一般的によくフォーマットされたコードはデバッグが簡単です。例えば。コードに閉じ括弧がありません。それに加えて、if/else(if)ステートメントを中括弧で書くことをお勧めします。素敵なインデントも役立ちます。 WordPress - PHPコーディング規約 を読むことをお勧めします。

あなたのコードに関して:

  • wp_mail() codexページに記載されているように、 wp_mail_content_type フィルタは、削除する必要があります。問題を避けるためにそれを追加する。
  • $attachmentパラメータのファイルは、パスとして指定する必要があります。

私はあなたのコードを少し更新しました:

if( isset( $_POST[ 'Save' ] ) ) {

    function my_custom_email_content_type( $content_type ) {
        return 'text/html';
    }

    if ( ! function_exists( 'wp_handle_upload' ) ) {
        require_once( ABSPATH . 'wp-admin/includes/file.php' );
    }

    $files = $_FILES[ 'my_files' ];
    $upload_overrides = array( 'test_form' => false );

    $attachments = array();

    foreach ( $files['name'] as $key => $value ) {
        if ( $files[ 'name' ][ $key ] ) {
            $file = array(
                'name'     => $files[ 'name' ][ $key ],
                'type'     => $files[ 'type' ][ $key ],
                'tmp_name' => $files[ 'tmp_name' ][ $key ],
                'error'    => $files[ 'error' ][ $key ],
                'size'     => $files[ 'size' ][ $key ]
            );
            $movefile = wp_handle_upload(
                $file,
                $upload_overrides
            );
            $attachments[] = $movefile[ 'file' ];
        }
    }

    $to        = '[email protected]';
    $subject   = 'Contact Us';
    $message   = 'Haiii';
    $headers[] = 'From: ' . get_option( 'blogname' ) . ' <[email protected]>';

    add_filter(
        'wp_mail_content_type',
        'my_custom_email_content_type'
    );
    $wp_mail_return = wp_mail(
        $to,
        $subject,
        $message,
        $headers,
        $attachments
    );
    if( $wp_mail_return ) {
        echo 'Mail send';
    } else {
        echo 'Failed';
    }
    remove_filter(
        'wp_mail_content_type',
        'my_custom_email_content_type'
    );
}
4
Nicolai