管理メニュー

PHP

【WordPress】自作管理メニューで登録したデータのオートロードをオフにする方法

更新日:2022/12/23

WordPressの自作管理メニューで登録したオプション値のオートロードをオフにする方法をお伝えします。

 

autoloadの役割

WordPressの管理画面で登録されたデータは、optionsテーブルに保存されます。
このテーブルでautoloadフィールドの値が 'yes' のレコードは、Webページ表示のたびに全てロードされます。

optionsテーブルのレコードは重要なものが多いので、一回のクエリで読み込むのは効率の観点から見ると妥当です。

しかし独自に追加した管理メニューなどでは、限られたケースでのみ使用するオプションをセットすることがあります。

例えば404ページに表示する内容を登録するケースです。
このデータは通常のページ表示で使用しません。
毎回読み込むのは、ムダですね。

そこで、限定ケースのみで使用するデータはautoloadに 'no' をセットし、自動読み込みを無効にします。
しかし【WordPress】管理画面に自作管理メニューとサブメニューを追加する方法で紹介した方法で管理画面を作成した場合、autoloadフィールドの値が 'yes' で登録されます。

'no' に変更するには、調べてみたところ、少し強引な方法が必要でした。

 

autoloadに 'no' をセットする方法

管理画面がオプションデータを保存するタイミングでautoloadに 'no' をセットするには、update_option_オプション名フィルターで直接データベースを変更します。

autoloadに 'no' をセットする例

add_action( 'admin_init',function(){
    add_action( 'update_option_オプション名' 
                , 'my_update_option' ,10,3);
});

function my_update_option( $old_value, $value, $option ){
    $wpdb->update( $wpdb->options
                , array( 'autoload'=> 'no' )
                , array( 'option_name' => $option ) );
}

update_option_オプション名フィルーターはコールバック関数に、3つの引数を渡します。

  • $old_value:

    変更前の値。

  • $value:

    変更後の値。

  • $option:

    オプション名。

テーマやプラグインではあまり使用しない、$wpdb->update() を呼び出しています。
このメソッドは、アップデートクエリをある程度柔軟に生成できます。

そこでオプション名をキーとして、autoloadに 'no' をセットしています。

 

少しだけ具体的な使用例

前項のmy_update_option()関数は、複数のオプションで使いまわせます。
複数のオプションを指定する少しだけ具体的な使用例を、挙げておきます。

add_action('admin_menu', function(){
	add_menu_page( 'myメニュー' , 'myメニュー' , 'manage_options' , 'my_menu'
			  , 'echo_my_menu' , '' , 3 );

	add_action( 'admin_init', function(){
		register_setting( 'my_option_group' , 'my_option_1' );
		register_setting( 'my_option_group' , 'my_option_2' );
		register_setting( 'my_option_group' , 'my_option_3' );

		add_action( 'update_option_my_option_1' , 'my_update_option' ,10,3);
		add_action( 'update_option_my_option_2' , 'my_update_option' ,10,3);
		add_action( 'update_option_my_option_3' , 'my_update_option' ,10,3);
	});

});


function my_update_option( $old_value, $value, $option ){
    $wpdb->update( $wpdb->options
                , array( 'autoload'=> 'no' ), array( 'option_name' => $option ) );
}

function echo_my_menu(){  // 管理画面の表示
    // 省略
}

WordPressはHTMやCSSの知識も必要。総合的な知識を身につけよう。

更新日:2022/12/23

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。