Functions.phpファイルにダッシュボードウィジェットを作成しました。フォームの送信時にデータベースの内容を更新できるようにしたいです。コーデックスの文書によると、私は投稿投稿をwp_add_dashboard_widget()の4番目の引数である$ control_callbackで処理するべきです。
だから私は私のハンドラー関数を作成し、私のfunctions.phpファイルにそれを含めました。フォームを送信しても何も起こりません。ちょっと考えた後、add_action()でコールバック関数をwp_dashboard_setupにフックしました。私のコールバック関数は現在実行されていますが、control_callback関数をwp_add_dashboard_widget()に渡したかどうかに関係なく実行されます。
私はこれを間違ってやっていますか、そしてこれをするより良い方法はありますか?また、私のフォームは空想的な場所に送信することを想定していますか。
私の完全なコードは次のとおりです。
function custom_dashboard_widget_coach() {
echo "
<p><strong>Finalize Game</strong></p>
<form method='post'>
<div class='team_class_wrap'>
<label>Class</label>
<select name='team' id='team'>
<option value='5a'>5A</option>
<option value='4a'>4A</option>
<option value='3a'>3A</option>
<option value='2a'>2A</option>
</select>
</div>
<input type='submit' value='Report Game Result' />
</form>
";
}
function custom_dashboard_widget_coach_handle()
{
var_dump($_POST);exit;
}
function add_custom_dashboard_widget_coach() {
wp_add_dashboard_widget('custom_dashboard_widget_coach', 'My Team', 'custom_dashboard_widget_coach', 'custom_dashboard_widget_coach_handle');
}
add_action('wp_dashboard_setup', 'custom_dashboard_widget_coach_handle');
add_action('wp_dashboard_setup', 'add_custom_dashboard_widget_coach');
実際にはfromフィールドはcontrol_callback
関数内にあるべきで、フォームとハンドリングの両方ですので、これを試してください:
<?php
/*
Plugin Name: custom dashboard widget
Plugin URI: http://en.bainternet.info
Description: custom dashboard widget with control form
Version: 0.1
Author: bainternet
Author URI: http://en.bainternet.info
*/
//show widget
function custom_dashboard_widget_coach() {
//get saved data
if ( !$widget_options = get_option( 'my_dashboard_widget_options' ) )
$widget_options = array();
$saved_team = isset($widget_options['team'])? $widget_options['team'] : '';
echo "
<p><strong>Finalized Game</strong></p>
<div class='team_class_wrap'>
<label>Class {$saved_team}</label>
</div>
";
}
//configure and update widget
function custom_dashboard_widget_coach_handle(){
//get saved data
if ( !$widget_options = get_option( 'my_dashboard_widget_options' ) )
$widget_options = array();
//process update
if ( 'POST' == $_SERVER['REQUEST_METHOD'] && isset($_POST['my_dashboard_widget_options']) ) {
//minor validation
$widget_options['team'] = wp_kses($_POST['my_dashboard_widget_options']['team'],array() );
//save update
update_option( 'my_dashboard_widget_options', $widget_options );
}
//set defaults
if(!isset($widget_options['team']))
$widget_options['team'] = ''; //you can set the default
echo "
<p><strong>Finalize Game</strong></p>
<div class='team_class_wrap'>
<label>Class</label>
<select name='my_dashboard_widget_options[team]' id='team'>
<option value='5a' ".selected( $widget_options['team'], '5a', false ).">5A</option>
<option value='4a' ".selected( $widget_options['team'], '4a', false ).">4A</option>
<option value='3a' ".selected( $widget_options['team'], '3a', false ).">3A</option>
<option value='2a' ".selected( $widget_options['team'], '2a', false ).">2A</option>
</select>
</div>
";
}
//register widget
function add_custom_dashboard_widget_coach() {
wp_add_dashboard_widget('custom_dashboard_widget_coach', 'My Team', 'custom_dashboard_widget_coach', 'custom_dashboard_widget_coach_handle');
}
add_action('wp_dashboard_setup', 'add_custom_dashboard_widget_coach');
これはあなたに与えるでしょう:
そして「configure」をクリックするとフォームが表示されます。
そしてあなたが送信をクリックするとデータが保存され、あなたはこれを見るでしょう:
この例では、データはoptionsテーブルに新しい行の配列として格納されていますが、ウィジェット固有のデータ(ウィジェット設定)にはdashboard_widget_options
オプション、ユーザー固有のデータにはusermeta
を使用できます。