自作プラグイン“フォームメール”の全体構成とデータベース関係の関数です。
コード
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
このプログラムをお使いになる場合は、お使いになる方の自己責任でお願いします。