LIGデザイナー採用
LIGデザイナー採用
2018.11.16

「MW WP Form」における設定内容のエクスポート・インポートについて

エリカ

こんにちは、Webディレクターのエリカです。

MW WP Form とは、WordPress上にショートコードを記述することで、メールフォームを実装できるショートコードタイプのメールフォームプラグインです。

入力項目のバリデーションに加え、企業用のサイトで必要になる(アクセス解析に親切な)URLの分割、確認画面などの機能もWordPressの管理画面から細かく設定することができます。

それゆえに、この設定項目を、たとえば開発環境・検証環境・本番環境と、管理画面からそれぞれ設定していくのは、少し大変かもしれません。

しかしながら、MW WP Form は、カスタム投稿タイプとカスタムフィールドを利用してフォームを管理しています。つまり、通常のエクスポート・インポートを行うことにより、フォームデータも簡単に移行することができます。

もちろん、データベースの内容を丸ごと移行できる場合であれば、そちらの方が確実です。しかしながら、機能の追加の場合などは、それも難しい場合があります。

そこで今回は、MW WP Form で作成したフォームを、エクスポート・インポートする方法について簡単にお話ししたいと思います。

エクスポートの方法

フォームを作成したWordPressの管理画面の ツール > エクスポート にアクセスします。

エクスポートする内容から「MW WP Form」を選択し、エクスポートファイルをダウンロードします。

このXMLファイルに、下記のような形式でフォームの内容が記述されています。

<item>
        <title>お問い合わせフォーム</title>
        <link>http://localhost/mw-wp-form/30/</link>
        <pubDate>Tue, 30 Oct 2018 04:25:44 +0000</pubDate>
        <dc:creator><![CDATA<pre>[code]]></dc:creator>
        <guid isPermaLink="false">http://localhost/?post_type=mw-wp-form&p=30</guid>
        <description></description>
        <content:encoded><![CDATA[お名前:
[mwform_text name="お名前" size="60"]

メールアドレス:
[mwform_text name="メールアドレス" size="60"]

[mwform_submitButton name="mwform_submitButton-605" confirm_value="確認画面へ" submit_value="送信する"]

[mwform_backButton value="戻る"]]]></content:encoded>
        <excerpt:encoded><![CDATA[]]></excerpt:encoded>
        <wp:post_id>30</wp:post_id>
        <wp:post_date><![CDATA[2018-10-30 13:25:44]]></wp:post_date>
        <wp:post_date_gmt><![CDATA[2018-10-30 04:25:44]]></wp:post_date_gmt>
        <wp:comment_status><![CDATA<pre>[code]]></wp:comment_status>
        <wp:ping_status><![CDATA<pre>[code]]></wp:ping_status>
        <wp:post_name><![CDATA[30]]></wp:post_name>
        <wp:status><![CDATA[publish]]></wp:status>
        <wp:post_parent>0</wp:post_parent>
        <wp:menu_order>0</wp:menu_order>
        <wp:post_type><![CDATA[mw-wp-form]]></wp:post_type>
        <wp:post_password><![CDATA[]]></wp:post_password>
        <wp:is_sticky>0</wp:is_sticky>
        <wp:postmeta>
            <wp:meta_key><![CDATA[_edit_last]]></wp:meta_key>
            <wp:meta_value><![CDATA[1]]></wp:meta_value>
        </wp:postmeta>
        <wp:postmeta>
            <wp:meta_key><![CDATA[mw-wp-form]]></wp:meta_key>
            <wp:meta_value><![CDATA[a:28:{s:11:"querystring";b:0;s:5:"usedb";b:0;s:12:"mail_subject";s:0:"";s:9:"mail_from";s:0:"";s:11:"mail_sender";s:4:"hoge";s:13:"mail_reply_to";s:16:"root@example.com";s:12:"mail_content";s:0:"";s:21:"automatic_reply_email";s:0:"";s:7:"mail_to";s:16:"root@example.com";s:7:"mail_cc";s:0:"";s:8:"mail_bcc";s:0:"";s:19:"admin_mail_reply_to";s:16:"root@example.com";s:18:"admin_mail_subject";s:0:"";s:16:"mail_return_path";s:0:"";s:15:"admin_mail_from";s:0:"";s:17:"admin_mail_sender";s:4:"hoge";s:18:"admin_mail_content";s:0:"";s:14:"akismet_author";s:0:"";s:20:"akismet_author_email";s:0:"";s:18:"akismet_author_url";s:0:"";s:16:"complete_message";s:38:"<div>

完了画面のHTML

</div>";s:9:"input_url";s:0:"";s:16:"confirmation_url";s:0:"";s:12:"complete_url";s:0:"";s:20:"validation_error_url";s:0:"";s:10:"validation";a:2:{i:0;a:2:{s:6:"target";s:9:"お名前";s:7:"noempty";s:1:"1";}i:1;a:3:{s:6:"target";s:21:"メールアドレス";s:7:"noempty";s:1:"1";s:4:"mail";s:1:"1";}}s:5:"style";s:0:"";s:6:"scroll";b:0;}]]></wp:meta_value>
        </wp:postmeta>
    </item>

インポートの方法

WordPressインポートツールを利用してインポートを行います(インポートツールがない場合は、はじめにインストールしてください)。

先ほどダウンロードしたXMLファイルをアップロードしてインポートを実行します。MW WP Form にフォームが登録されていれば、まずは成功です。フォームの中身を見て、バリデーション設定や各種設定項目も反映されていれば問題ありません。

本文以外が反映されない場合

ただ、もしかしたら本文以外が反映されない場合があるかもしれません。

はじめにお伝えしたとおり、MW WP Form は、カスタム投稿タイプと、カスタムフィールドを利用しています。そして、バリデーション設定などは、カスタムフィールドに格納されています。

エクスポートしたXMLファイルの中身を見ると、どのカスタムフィールドを利用しているか確認できます。

<wp:postmeta>
            <wp:meta_key><![CDATA[mw-wp-form]]></wp:meta_key>

この部分が、MW WP Form が利用するカスタムフィールドです。

そしてこれは、post_meta テーブルに、meta_key で、 mw-wp-form という項目で保存されますので、データベースで直接確認してみてください。

もし、これが空になってしまっているのであれば、XMLにエクスポートされている内容が、データベースに正しくインポートできていない可能性があります。この問題は、WordPressのインポート・エクスポートに起因しています。

WordPressのインポート・エクスポート

前提として、カスタムフィールドには文字列を保存することになります。そのため、バリデーション設定などのさまざまな項目データに対しては、シリアライズという処理を行い、一つの文字列に変換し保存する形になっています。

そして、その文字列を今度はデシリアライズという処理で、文字列から元のデータの状態に復元する形で、多くの項目をまとめて管理しています。

それが、一度XMLファイルを経由することにより、正しく情報が伝達できなくなっているようでした。

具体的には、シリアライズされた完了画面のHTMLを記述した箇所が正しく復元できていませんでした。エクスポートしたXMLの内容を詳しく見ると、下記のような部分があるかと思います。

s:38:"<div>

完了画面のHTML

</div>";

実は、s:38: の部分はbyte数になるのですが、どうやら改行の関係でここがズレてしまっているようでした。

<?php
$str = '<div>

完了画面のHTML

</div>';

echo strlen($str)
// 34

ためしに、インポートしようとする環境で上記PHPを実行した結果、やはり数値が異なったので、XMLファイルのbyte数の部分を下記のように変更します。

s:34:"<div>

完了画面のHTML

</div>"

このXMLファイルを再度インポートすると、どうやら正しくデシリアライズされたようで、インポートに成功しました。

まとめ

いかがでしたか? 今回は MW WP Form についてあらためてまとめてみましたが、とても素晴らしいプラグインですね。みなさんもぜひ触ってみてください。

それでは、エリカでした。