7. 1 フォームメール プラグイン全体構成

 自作プラグイン“フォームメール”の全体構成とデータベース関係の関数です。

コード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
// 管理画面
if ( is_admin() ) {
    require_once 'hk-form-mail_admin_1.php';
    require_once 'hk-form-mail_admin_2.php';
    $hk_form_mail_admin_1 = new Hk_Form_Mail_Admin_1();
    $hk_form_mail_admin_2 = new Hk_Form_Mail_Admin_2();

    // 管理画面に設定メニューの追加
    function hk_form_mail_add_admin_menu() {
        global $hk_form_mail_admin_1;
        add_options_page( 'フォームメール設定', 'フォームメール', 'manage_options', 'hk_form_mail', array( $hk_form_mail_admin_1, 'admin_main' ) );
    }
    add_action( 'admin_menu', 'hk_form_mail_add_admin_menu' );
}

// メール送信
if ( ! is_admin() ) {
    require_once 'hk-form-mail_send.php';
    $hk_form_mail_send = new Hk_Form_Mail_Send();
}

// ショートコード実行 メール送信
function hk_form_mail_send_form_mail( $atts ) {
    global $hk_form_mail_send;
    return $hk_form_mail_send->send_form_mail( $atts );
}
add_shortcode( 'hk-form-mail', 'hk_form_mail_send_form_mail' );

// データベース関係
class Hk_Form_Mail_Common {
    private $db_option_base = 'hk_form_mail';        // データベース接頭文字列

    // フォーム実在数読み込み
    //   戻り値:$form_exist
    function db_read_index() {
        $form_exist = get_option( $this->db_option_base, '' );
        if ( $form_exist == '' )    $form_exist = 0;
        return $form_exist;
    }

    // フォーム実在数書き込み
    function db_write_index( $form_exist ) {
        update_option( $this->db_option_base, $form_exist );
        return;
    }

    // フォームデータ読み込み
    //   戻り値:$form_data
    function db_read( $form_no ) {
        // DB読み出し
        $db_option = $this->db_option_base.'_'.$form_no;
        $db_str = get_option( $db_option, '' );
        if ( $db_str == '' )    return '';
        // 分解
        $form_data = hk_func_data_explode_half( $db_str );
        // フォーム名称 逆文字変換
        $form_data['form_name'] = hk_func_hex2spchar( $form_data['form_name'] );
        // 項目数
        $label_exist = $form_data['label_exist'];
        // フォーム項目分解
        $labels = explode( ',', $form_data['label'] );
        $needs  = explode( ',', $form_data['need'] );
        $types  = explode( ',', $form_data['type'] );
        for ( $i=1; $i<=$label_exist; $i++ ) {
            $form_data[ $i ]['order'] = $i;
            $form_data[ $i ]['label'] = hk_func_hex2spchar( $labels[ $i-1 ] );
            $form_data[ $i ]['need']  = $needs[ $i-1 ];
            $form_data[ $i ]['type']  = $types[ $i-1 ];
        }
        // 逆文字変換
        //   メールタイトル,TO送信先,CC送信先,BCC送信先,送信者,メール冒頭文
        $form_data['title'] = hk_func_hex2spchar( $form_data['title'] );
        $form_data['to']    = hk_func_hex2spchar( $form_data['to'] );
        $form_data['cc']    = hk_func_hex2spchar( $form_data['cc'] );
        $form_data['bcc']   = hk_func_hex2spchar( $form_data['bcc'] );
        $form_data['from']  = hk_func_hex2spchar( $form_data['from'] );
        $form_data['lead']  = hk_func_hex2spchar( $form_data['lead'] );
        return $form_data;
    }

    // フォームデータ書き込み
    function db_write( $form_no, $form_data ) {
        // フォーム名称 文字変換
        $form_data['form_name'] = hk_func_spchar2hex( $form_data['form_name'] );
        // 項目数
        $label_exist = $form_data['label_exist'];
        // フォーム項目データ連結
        $labels = array();
        $needs  = array();
        $types  = array();
        for ( $i=1; $i<=$label_exist; $i++ ) {
            $labels[] = hk_func_spchar2hex( $form_data[ $i ]['label'] );
            $needs[]  = $form_data[ $i ]['need'];
            $types[]  = $form_data[ $i ]['type'];
        }
        $form_data['label'] = implode( ',', $labels );
        $form_data['need']  = implode( ',', $needs );
        $form_data['type']  = implode( ',', $types );
        // 文字変換
        //   メールタイトル,TO送信先,CC送信先,BCC送信先,送信者,メール冒頭文
        $form_data['title'] = hk_func_spchar2hex( $form_data['title'] );
        $form_data['to']    = hk_func_spchar2hex( $form_data['to'] );
        $form_data['cc']    = hk_func_spchar2hex( $form_data['cc'] );
        $form_data['bcc']   = hk_func_spchar2hex( $form_data['bcc'] );
        $form_data['from']  = hk_func_spchar2hex( $form_data['from'] );
        $form_data['lead']  = hk_func_spchar2hex( $form_data['lead'] );
        // フォームデータキー項目
        $form_data_key = array(
            'form_name',        // フォーム名称
            'label_exist',      // フォーム項目数
            'label',            // 項目名
            'need',             // 必須
            'type',             // 入力タイプ
            'title',            // メールタイトル
            'to',               // TO送信先
            'cc',               // CC送信先
            'bcc',              // BCC送信先
            'from',             // 送信者
            'lead',             // メール冒頭文
            'creator',          // 作成者ID
            'updater',          // 更新者ID
            'create_day',       // 作成日
            'update_day',       // 更新日
        );
        // 書き込みデータ作成
        $db_strs = array();
        foreach( $form_data_key as $key )
            $db_strs[] = $key.'='.$form_data[ $key ];
        unset( $key );
        $db_str = implode( '&', $db_strs );
        // 書き込み
        $db_option = $this->db_option_base.'_'.$form_no;
        update_option( $db_option, $db_str );
        return;
    }

    // フォームデータ削除
    function db_delete( $form_no ) {
        $db_option = $this->db_option_base.'_'.$form_no;
        delete_option( $db_option );
        return;
    }
}
$hk_form_mail = new Hk_Form_Mail_Common();

利用しているフック

wp-admin/includes/menu.php
    do_action( 'admin_menu', '' );

説明

 データベースには下記2種類のデータを登録しています。
  'hk_form_mail':フォーム数
  'hk_form_mail_(フォーム番号)':フォームデータ
 下記関数に関しては“共通関数”をご覧ください。
  hk_func_data_explode_half
  hk_func_hex2spchar
  hk_func_spchar2hex

 このプログラムをお使いになる場合は、お使いになる方の自己責任でお願いします。

関連

更新日:2016/01/24
掲載日:2014/08/10