WordPressの保存回りの覚書です。
Contents
保存ボタン(エラーError: The myplugin_settings
options page is not in the allowed options list.)
何も設定しないと
submit_button();
save changes
というボタンが表示されました。
submit_button('保存');
しかし、表示上は問題ありませんが、保存ボタンをおすとエラーがでます。
Error: The myplugin_settings options page is not in the allowed options list.
この問題は第2引数を指定すると解決します。
submit_button(__('保存', 'myplugin'));
// submit_button();
submit_button()
関数の第1引数にボタンに表示するテキストを指定することで、ボタンのラベルを変更できます。ただ、翻訳も考えると次のようになるようです。
submit_button(__('保存', 'your-plugin-textdomain'));
__()
関数は、WordPress の翻訳関数です。第1引数にテキストを指定し、第2引数にプラグインのテキストドメインを指定します。これにより、WordPress の言語設定に基づいて適切な翻訳が行われます。
プラグインのテキストドメインは、一般的にプラグインのフォルダ名(ディレクトリ名)と同じにするのが慣例となっています。
保存データの確認方法
localを使っています。loccalのDatabaseのタブから開くだけです。
wp_options > データ > 検索
から検索で、myplugin_textというフィールドIDをいれます。
【PHP】get_option、update_optionは使わず更新できる!?
WordPressのupdate_optionは少々ややこしかったので覚書です。プログラマならすぐこう理解するでしょう。
- get_optionは値の取得
- update_optionは値の更新
ただ、update_optionを使わずとも更新できるのです…。WordPressの特性の理解しないとハマるかも。
/**
* プラグインの設定を登録
*/
function myplugin_register_settings() {
// 'myplugin'ページに新しい設定セクション'myplugin_section'を追加
add_settings_section(
'myplugin_section', // セクションのID
'設定', // セクションのタイトル
null, // セクションの説明を出力する関数。nullの場合、説明は表示されない。
'myplugin' // この設定セクションが属するページのスラッグ
);
// 'myplugin_section'セクションに新しい設定フィールド'myplugin_text'を追加
add_settings_field(
'myplugin_text', // フィールドのID
'テキスト', // フィールドのラベル
'myplugin_text_callback', // フィールドのHTMLを出力する関数
'myplugin', // このフィールドが属するページのスラッグ
'myplugin_section' // このフィールドが属するセクションのID
);
// 'myplugin_settings'オプショングループに'myplugin_text'オプションを登録
register_setting('myplugin_settings', 'myplugin_text');
}
// 'admin_init'アクションフックに'myplugin_register_settings'関数を登録
// これにより、WordPressは管理画面を初期化する際に'myplugin_register_settings'関数を呼び出す
add_action('admin_init', 'myplugin_register_settings');
/**
* テキスト設定のHTMLを出力
*/
function myplugin_text_callback() {
// 'myplugin_text'オプションの現在の値を取得。オプションが存在しない場合、デフォルト値として空文字列を使用。
$text = get_option('myplugin_text', '');
?>
<!-- テキスト入力フィールドを出力。nameは'myplugin_text'、valueは現在の設定値、スタイルは幅100% -->
<input type="text" name="myplugin_text" value="<?php echo esc_attr($text); ?>" style="width:100%;">
<?php
}
update_option
は直接使用されていませんが、WordPressの設定APIが裏でupdate_option
を使っています。
具体的には、register_setting('myplugin_settings', 'myplugin_text');
という行が重要です。この行は、myplugin_text
という設定項目をmyplugin_settings
という設定グループに登録します。これにより、WordPressは自動的にこの設定項目の値を保存・読み込みするためのロジックを生成します。
設定ページのフォームが送信されると(submit_button
が押されると)、WordPressはoptions.php
ページを呼び出します。このページは、登録された設定項目の値を自動的に検証し、update_option
を使って新しい値をデータベースに保存します。
そのため、プラグイン開発者はget_option
を使って設定値を読み込むことはしますが、update_option
を直接使う必要はありません。WordPressの設定APIがupdate_option
の役割を果たしているのです。
register_settingのデータはどこで受け渡されているのだろうと疑問に思うでしょう。簡単に理解するとこうです。
- register_settingで登録しておく
- options.phpが呼び出されると、コールバック関数でその登録先が呼び出されて登録データがすべて登録できる
- options.phpがupdate_optionを使ってデータベースに保存する
もう少し詳しく書くとこうです。
register_setting
で設定項目を登録する
- プラグインの初期化時(通常は
admin_init
アクションフック)に、register_setting
を使って設定項目を WordPress に登録します。 - これにより、WordPress は設定項目の名前、デフォルト値、データベースのオプション名、検証用コールバック関数(オプション)を知ることができます。
設定ページのフォームからoptions.php
が呼び出される
- 設定ページのフォームの
action
属性がoptions.php
になっているため、フォームがサブミットされるとoptions.php
ページが呼び出されます。 options.php
は、POSTデータから設定グループの名前を取得し、その設定グループに属する設定項目の情報を WordPress のオプションAPIから取得します。
options.php
が設定項目の新しい値を取得し、検証する
options.php
は、POSTデータから各設定項目の新しい値を取得します。- 次に、
register_setting
で登録された検証用コールバック関数(もしあれば)を使って、新しい値を検証します。
options.php
がupdate_option
を使って新しい値をデータベースに保存する
- 検証に合格した新しい値は、
update_option
関数を使ってデータベースに保存されます。 - この際、
register_setting
で指定されたデータベースのオプション名が使われます。
WordPressのトランジェントAPIで一時保存!
トランジェントAPIはとても便利です。
トランジェントAPIの基礎知識:
- トランジェントは一時的なデータを保存するためのWordPressの機能です。
- キーと値のペアで保存され、有効期限を設定できます。
- 主な関数は以下の3つです:
set_transient($key, $value, $expiration)
: トランジェントを設定get_transient($key)
: トランジェントを取得delete_transient($key)
: トランジェントを削除
delete_thumbnail_transient
関数の発火タイミング: この関数は以下のアクションフックに接続されています。
phpCopyadd_action('edit_post', 'delete_thumbnail_transient', 10, 1);
add_action('save_post', 'delete_thumbnail_transient', 10, 1);
これにより、以下のタイミングで発火します:
- 投稿が編集されたとき(
edit_post
) - 投稿が保存されたとき(
save_post
)
つまり、投稿のタイトルが変更されたり、内容が更新されたりするたびに、この関数が呼び出されます。
set_transientとupdate_optionと の違い
- update_option:
- データベースの wp_options テーブルにデータを永続的に保存します。
- 有効期限がなく、明示的に削除されるまでデータは保持されます。
- サイト全体で共有される設定やデータの保存に適しています。
- 使用例:サイト設定、プラグイン設定など。
- set_transient:
- 一時的なデータを保存するためのAPIです。
- デフォルトではデータベースに保存されますが、オブジェクトキャッシュを使用している場合はメモリに保存されることもあります。
- 有効期限を設定でき、期限が切れると自動的に削除されます。
- 頻繁に変更される可能性のある一時的なデータの保存に適しています。
- 使用例:API呼び出しの結果のキャッシュ、一時的な計算結果など。
主な違い:
- 永続性:
update_option
は永続的、set_transient
は一時的。 - 有効期限:
update_option
にはなし、set_transient
にはあり。 - 用途:
update_option
は長期的な設定に、set_transient
は短期的なキャッシュに適しています。 - パフォーマンス:
set_transient
はキャッシュとして機能するため、頻繁なアクセスがある場合はより高速です。
update_post_meta
update_post_meta
はデータベースに保存する関数です。具体的な仕様を説明します:
- 機能:
update_post_meta
は特定の投稿(ポスト、ページ、カスタム投稿タイプ)に関連するメタデータを更新または追加します。 - データベースの操作:
- WordPress の
wp_postmeta
テーブルにデータを保存します。 - 既存のメタキーが存在する場合は更新し、存在しない場合は新しく追加します。
- WordPress の
- パラメータ: phpCopy
update_post_meta($post_id, $meta_key, $meta_value, $prev_value = '')
$post_id
: メタデータを関連付ける投稿のID$meta_key
: メタデータの識別子(キー)$meta_value
: 保存する値$prev_value
: (オプション)更新前の値。指定すると、その値と一致する場合のみ更新します。
- 戻り値:
- 成功時は
true
- 失敗時は
false
- 成功時は
- 特徴:
- 投稿固有のデータを保存するのに適しています。
- 同じ
$meta_key
で複数の値を持つことができます(配列として保存)。
update_post_metaとupdate_optionの違い
- データの範囲:
update_post_meta
: 特定の投稿に関連するデータを保存update_option
: サイト全体の設定やグローバルなデータを保存
- データベーステーブル:
update_post_meta
:wp_postmeta
テーブルを使用update_option
:wp_options
テーブルを使用
- 使用例:
update_post_meta
: 投稿固有の設定、カスタムフィールドの値などupdate_option
: サイト全体の設定、プラグインの設定値など
- データの取得:
update_post_meta
で保存したデータはget_post_meta
で取得update_option
で保存したデータはget_option
で取得
- 複数値の扱い:
update_post_meta
は同じキーで複数の値を持てるupdate_option
は通常、キーごとに1つの値のみ
これらの違いを理解することで、適切な場面で適切な関数を使用できます。投稿固有のデータには update_post_meta
を、サイト全体の設定には update_option
を使用するのが一般的です。
WordPressのデータベースの削除を確認
phpMyAdminの画面に入ります。
確認するテーブルはwp_postmetaとwp_optionsの2つです。
a) wp_postmetaテーブルの確認:
- 左側のテーブル一覧から「wp_postmeta」>「データ」をクリックします。
- 画面上部の「検索」ボックスを使用します。
- 検索ボックスに「LIKE」、「接頭語_%」と入力してenterします。
LIKE
演算子は、SQLで特定のパターンに一致するデータを検索するために使用される演算子です。主に曖昧検索を行う際に利用されます。%
: ワイルドカードで0文字以上の任意の文字列に一致します。
b) wp_optionsテーブルの確認:
- 左側のテーブル一覧から「wp_options」>「データ」をクリックします。
- 同様の手順で消します。
結果の解釈:
- これらの検索で結果が表示されなければ、プラグインのデータは正常に削除されたと判断できます。
- アイキャッチ画像を作る_wp_attached_fileなどWordPerssのコアシステムが作ったDBは消えません。メディアライブラリから消すことにより消えます。
- 結果が表示された場合、アンインストールプロセスが完全には実行されていない可能性があります。
コメント