web-dev-qa-db-ja.com

Functions.phpまたはプラグインを介してウィザードを作成するときにcontrol_callbackを使用する方法

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');
3
John B

実際には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');

これはあなたに与えるでしょう: enter image description here

そして「configure」をクリックするとフォームが表示されます。enter image description here

そしてあなたが送信をクリックするとデータが保存され、あなたはこれを見るでしょう:enter image description here

この例では、データはoptionsテーブルに新しい行の配列として格納されていますが、ウィジェット固有のデータ(ウィジェット設定)にはdashboard_widget_optionsオプション、ユーザー固有のデータにはusermetaを使用できます。

5
Bainternet