LoginSignup
2
1

More than 3 years have passed since last update.

WordPressの投稿フォームのデータをkintoneに登録する

Last updated at Posted at 2019-09-16

はじめに

WordPressで作ったWebサイトのフォームデータを、何らかのデータベースに登録したいと言うことが時々あります。

今回、ローカルにDockerでWordPressの環境を作り、プラグインに ContactForm7 を使ったお問い合わせフォームから、kintoneにレコードを登録してみました。

WordPress環境構築

Dockerを使ってWordPress環境を構築します。

Dockerのインストールは下記を参照してください。

Dockerをインストールして、docker-compose.yml に設定をJSONで記述するだけです。

今回のdocker-compose.ymlを置いておきます。

docker-compose.yml
version: '3.3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress
     container_name: db-container
   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
       WORDPRESS_DB_NAME: wordpress
     volumes:
       - ./html:/var/www/html
       - ./vendor:/var/www/vendor
     container_name: wp-container
volumes:
    db_data: {}

Composer のセットアップ

2019年9月14日(土)のPHPの勉強会「Shizuoka.php」でComposerの存在を知りました。
RubyのgemやNodeのnpmと同じ、ライブラリの依存関係を管理してくれるライブラリです。

セットアップは下記参照

docker-compseしたディレクトリにセットアップすると、vendorディレクトリ以下にライブラリがインストールされます。
Dockerでvendorディレクトリをマウントしてください。

PHP dotenv のセットアップ

Rubyのdotenv のPHPバージョン。kintoneのAPIトークンなどを外部の設定ファイルから読み込む様にします。

セットアップは下記参照

Contact Form 7 プラグイン セットアップ

WordPressのお問い合わせフォームプラグイン

セットアップは下記参照

kintone アプリ作成

WordPressのお問い合わせフォームのデータを登録するアプリを作成します。

スクリーンショット 2019-09-16 20.04.02.png

WordPressのフォームデータをkintoneアプリに登録する

Contact Form 7 の wpcf7_before_send_mail アクションフックを利用してフォームデータを取得して、
wp_remote_post 関数でkintoneにデータを登録します。

詳細は下記を参照

functions.php にアクションフックを登録します。


function add_cf7_form_data($wpcf7) {
    $submission = WPCF7_Submission::get_instance();
    if ( $submission ) {
        $posted_data = $submission->get_posted_data();
    }
    require get_template_directory() . '/inc/cf7-to-kintone.php';
    return $wpcf7;
}
add_action( 'wpcf7_before_send_mail', 'add_cf7_form_data');

アクションフックで取得したフォームデータを wp_remote_post 関数でkintoneに登録します。


<?php
require_once '../vendor/autoload.php';
$dotenv = Dotenv\Dotenv::create(__DIR__);
$dotenv->load();

function wpform_to_kintone($form_data) {
    $url = 'https://'. getenv('SUB_DOMAIN') . '.cybozu.com/k/v1/record.json';
    $request = array(
        "app" => getenv('APP_ID'),
        "record" => array(
            "お名前" => array("value" => $form_data['your-name']),
            "メールアドレス" => array("value" => $form_data['your-email']),
            "題名" => array("value" => $form_data['your-subject']),
            "本文" => array("value" => $form_data['your-message']),
        )
    );
    $args = array(
        'method' => 'POST',
        'headers' => array(
            'X-Cybozu-API-Token' => getenv('API_TOKEN'),
            'Content-Type' => 'application/json'
        ),
        'body' => json_encode( $request )   
    );
    $response = wp_remote_post( $url, $args);
    if ( is_wp_error( $response ) ) {
        $error_message = $response->get_error_message();
            error_log("Error: " . $error_message . "\n", 3, 'wp-to-kintone.log');
     } else {
            error_log("Success: " . $response['body'] . "\n", 3, 'wp-to-kintone.log');
        return $response;
     }
}
$res = wpform_to_kintone($posted_data);

参考サイト

下記のリンクを参考にさせていただきました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1