WordPressのContact Form 7とVue.jsを使ってEC-CUBE4でお問合せフォームを作る方法です。
WordPressにContact Form 7をインストールしてお問合せフォームを作成
WordPressにContact Form 7というプラグインをインストールして、コンタクトフォームを新規作成して下さい。
コンタクトフォームを作成すると以下のようなショートコードが発行されます。
EC-CUBE4でお問合せフォームを作るときにショートコードのidを使用しますのでメモしておいて下さい。
EC-CUBE4のページ管理でお問い合わせページを作成
フォーム送信はContact Form 7のREST APIを使って行います。
EC-CUBE4のページ管理でお問合せフォーム用のページを作成して、以下のコードを貼り付けて下さい。
{% extends 'default_frame.twig' %}
{% block main %}
<div class="ec-layoutRole__contents">
<div class="ec-layoutRole__main">
<div class="ec-contactRole">
<div class="ec-pageHeader">
<h1>お問い合わせ</h1>
</div>
</div>
<div class="ec-off1Grid">
<div class="ec-off1Grid__cell">
<form id="vueform" v-on:submit.prevent="onSubmit" ref="form" novalidate>
<p>
<label for="name">
お名前<br>
<input type="text" id="name" name="your-name" /><br />
<span class="wpcf7-form-control-wrap your-name"></span>
</label>
</p>
<p>
<label for="email">
メールアドレス<br>
<input type="text" id="email" name="your-email" /><br />
<span class="wpcf7-form-control-wrap your-email"></span>
</label>
</p>
<p>
<label for="subject">
題名<br>
<input type="text" id="subject" name="your-subject" /><br />
<span class="wpcf7-form-control-wrap your-subject"></span>
</label>
</p>
<p>
<label for="message">
メッセージ本文<br>
<textarea id="message" name="your-message"></textarea><br />
<span class="wpcf7-form-control-wrap your-message"></span>
</label>
</p>
<input type="submit" value="送信" />
<input type="hidden" name="_wpcf7" v-model="formId" />
<input type="hidden" name="_wpcf7_unit_tag" v-model="unitTag" />
<input type="hidden" name="_wpcf7_locale" value="ja" />
</form>
</div>
</div>
</div>
</div>
{% endblock %}
{% block javascript %}
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/axios@0.12.0/dist/axios.min.js"></script>
<script>
var vm = new Vue({
el: "#vueform",
delimiters: ['{$', '$}'],
data: {
formId: 4167, // 作成したContact Form 7のフォームIDを設定
},
computed: {
unitTag() {
return "wpcf7-f"+this.formId+"-o1";
}
},
methods: {
onSubmit() {
let form = this.$refs.form;
const formData = new FormData(form);
if(danger = form.getElementsByClassName("text-danger")) {
for(let i=0; i<danger.length; i++) {
danger[i].textContent = "";
}
}
if(alert = form.querySelector(".alert")) {
alert.remove();
}
let message = document.createElement('p');
// 所有しているドメインに書き換えて下さい
axios.post(`https://mydomain.com/wp-json/contact-form-7/v1/contact-forms/${this.formId}/feedback`, formData)
.then(function(response) {
switch(response.data.status) {
case "validation_failed":
for(i in response.data.invalidFields) {
let error = document.querySelector(response.data.invalidFields[i].into);
error.textContent = response.data.invalidFields[i].message;
error.classList.add("text-danger")
}
break;
case "mail_sent":
message.textContent = response.data.message;
message.classList.add("alert");
message.classList.add("alert-success");
form.append(message);
if(inputs = form.querySelectorAll("p input, p textarea")){
for(let i=0; i<inputs.length; i++) {
inputs[i].value = "";
}
}
break;
default:
message.textContent = response.data.message;
message.classList.add("danger");
form.append(message);
}
})
.catch(function(error){
message.textContent = "エラーが発生しました。";
message.classList.add("alert");
message.classList.add("alert-danger");
form.append(form);
})
.finally(function(){
if(overlay = document.querySelector(".bg-load-overlay")) {
overlay.parentNode.removeChild(overlay);
}
});
},
}
})
</script>
{% endblock %}
formIdにはContact Form 7で発行したショートコードのidを設定して下さい。
POST送信するときのドメインをコンタクトフォームを作成したWordPressのドメインに変更して下さい。
送信後やエラー時のメッセージの編集
送信後やエラー時のメッセージ編集はContact Form 7の編集画面で行えば反映されます。
注意
Contact Form 7のインテグレーションでreCAPTCHAを設定した場合、送信時にspam判定されてしまい送信出来ませんので、reCAPTCHAを設定している場合は解除する必要があります。
