この記事はブロックされています。続きを読みたい方はログインをして下さい。会員ではない方は新規会員登録をして下さい。


ワードプレスでオリジナルプラグインを作ってみよう その4 設定画面を作りデータをデータベースに保存する

前回は管理画面のサイドメニューをカスタマイズしました。しかし、サブメニューを作っただけで入力フォームや実際のデータを保存する処理を実装していません。今回はフォームを作ってデータをデータベースに保存する方法です。

前回追加したサブメニューは「基本設定(my_mail_notice_set)」「アンイストール(my_mail_notice_del)」の2つです。
独自関数「my_mail_notice_set()」「my_mail_notice_del()」に処理を書いていきます。
「my_mail_notice_set()」「my_mail_notice_del()」はHTMLとPHPといったデザインとプログラムを書くのですが、デザイン部分が肥大化するような大きなプログラムの場合は、デザインとプログラムを別々のファイルに分けて「require_once()」関数でファイルを読み込みます。

この辺は外部CSSと外部JSファイルの考え方とまったく一緒です。しかし、今回は小さいなプログラムなのでファイルは分けません。

まずフォームの部分ですが、必要な項目は「投稿ID」「送信メールアドレス」の2つだけです。
あとはボタンがひとつあれば十分です。
フォームのHTMLの部分は公開用ではなく自分が使うだけなのできっちりしている必要はありません。

<div class="wrapper">

	<h2>基本設定</h2>

	<form action="" method="post">

	<table>
		<!-- 1行目 -->
		<tr>
			<!-- 1列目 -->
			<th>
				記事ID
			</th>

			<!-- 2列目 -->
			<td>
				<input name="target_id" type="text" size="30">
				<span class="notice">※ユーザーがアクセスしたら通知したい記事ID</span>
			</td>
		</tr>

		<!-- 2行目 -->
		<tr>
			<!-- 1列目 -->
			<th>
				メールアドレス
			</th>

			<!-- 2列目 -->
			<td>
				<input name="my_mail" type="text" size="30">
				<span class="notice">※自分に送信するメールアドレス</span>
			</td>
		</tr>

		<!-- 3行目 -->
		<tr>
			<!-- 1列目 -->
			<td colspan="2">
				<input type="submit" value="保存">
			</td>
		</tr>
	</table>

	</form>

</div>

ポイントはフォームの「action=””」は空にしておきます。空にすると自分自身に対して送信することになります。
HTML5だとダメらしいですが、公式でも空になっていることが多いのでこれでOK。
余談ですが現在開いているプラグインの管理画面からプラグインファイルをURLで取得するにはこうします。

$my_plugin_url = WP_PLUGIN_URL . '/' . plugin_basename( __FILE__ );

話は戻って、これを実装するとこんな感じになります。

フォームのHTMLを追加
フォームのHTMLを追加

しかし、これだけではまだダメです。単にフォームを作っただけだからです。
必要な処理は

[note]1.もしデータベースに値が保存されていたら呼び出すこと
2.もし値が入力されたら値を保存すること[/note]

の2つです。

まず保存後、2回目に保存されている値をデータベースから取り出す方法です。
これはワードプレスで関数が用意されているので一行で取り出せてしまいます。SQLも書く必要がありません。

<?php echo get_option( 'キー名' ); ?>

「get_option()関数」を使うとデータベースの「wp_options」テーブルにある「キー名」の値を取得できます。
「キー名」は自分で決めます。
例えばキーに「target_id」と付けた場合は以下のようにします。

<?php echo get_option( 'target_id' ); ?>

簡単ですね。当然保存する時も「update_option()」関数を使って一行で可能です。

<?php update_option( 'target_id' , '123' ); ?>

削除する時は「delete_option()」関数を使います。

<?php delete_option( 'target_id' ); ?>

これを先ほどのHTMLに実装してみます。コメントが付いているので分かりやすいと思います。

//設定画面を表示する///////////////////////////////////////////////////////////
function my_mail_notice_set()
{

//キーを変数にセットして使い回す
$ID_KEY = 'target_id';
$ML_KEY = 'my_mail';

//フォームから渡された記事ID
$TARGET_ID = $_POST[ $ID_KEY  ];

//フォームから渡されたメールアドレス
$MY_MAIL = $_POST[ $ML_KEY ];

//IDとメールアドレスがあれば
if( $TARGET_ID and $MY_MAIL )
{
	//保存する
	update_option( $ID_KEY  , $TARGET_ID );
	update_option( $ML_KEY , $MY_MAIL );

	//メッセージを作る
	$msg = '<strong>保存しました。</strong>';

}
//なければ
else
{
	//wp_optionsから取得する
	$TARGET_ID 	= get_option( $ID_KEY  );
	$MY_MAIL 	= get_option( $ML_KEY );
}

//PHP終わり
?>

<div class="wrapper">

	<h2>基本設定</h2>
	<?php echo $msg; ?>
	<form action="" method="post">

	<table>
		<!-- 1行目 -->
		<tr>
			<!-- 1列目 -->
			<th>
				記事ID
			</th>

			<!-- 2列目 -->
			<td>
				<input name="target_id" type="text" size="30" value="<?php echo $TARGET_ID; ?>">
				<span class="notice">※ユーザーがアクセスしたら通知したい記事ID</span>
			</td>
		</tr>

		<!-- 2行目 -->
		<tr>
			<!-- 1列目 -->
			<th>
				メールアドレス
			</th>

			<!-- 2列目 -->
			<td>
				<input name="my_mail" type="text" size="30" value="<?php echo $MY_MAIL; ?>">
				<span class="notice">※自分に送信するメールアドレス</span>
			</td>
		</tr>

		<!-- 3行目 -->
		<tr>
			<!-- 1列目 -->
			<td colspan="2">
				<input type="submit" value="保存">
			</td>
		</tr>
	</table>

	</form>

</div>

<?php
//PHP始まり

}

これで取りあえずは設定を入力し保存することができました。
しかし、これでは単にデータベースに保存しただけで機能には影響しません。
今度は実際に処理をしている「init_my_mail_notice()」関数から保存したデータを呼び出します。

これは二行追加するだけです。

関連記事