前回の投稿ではメディアアップローダの画面を利用したファイルのアップロードを書きましたが、今回は単純なプログラムによるファイルのアップロードを書きます。
プラグインを作成する方向性としては、無意味な実装になるかもしれませんが、ここは実験がてらやってみます。
まず、作成中のプラグインのTOP画面にファイルアップロード用のボタンを追加します。
function disp() { echo <<< EOL <form action="" method="post"> <h2>データ一覧</h2> <input type='submit' name='submit[regist]' class='button-primary' value='新規登録' /> <input type='submit' name='submit[regist_file]' class='button-primary' value='新規登録(ファイルアップロード)' /> <div class="wrap"> <table class="wp-list-table widefat striped posts"> <tr> <th nowrap>ID</th> <th nowrap>名前</th> <th nowrap>テキスト</th> <th nowrap>チェック</th> <th nowrap>ラジオ</th> <th nowrap>セレクト</th> <th nowrap>テキストエリア</th> <th nowrap>登録日時</th> <th nowrap>詳細</th> <th nowrap>編集</th> </tr> EOL; 以下、省略します…
すると次のような画面になります。
続いて、ボタンを押下した際の動作を決める関数に、ファイルアップロード用画面と、アップロードボタンを押された際のメソッドを追加します。
function sample_plugin() { if (isset($_REQUEST["submit"]["detail"])) { //他の処理は記述を省略します… } else if (isset($_REQUEST["submit"]["regist_file"])) { //ファイルアップロード用画面 self::regist_file(); } else if (isset($_REQUEST["submit"]["regist_file_up"])) { //ファイルアップロード処理 self::regist_file_up(); } else { self::disp(); } }
次に、画面上の「新規登録(ファイルアップロード)」ボタンを押した時の処理を書きます。
function regist_file($error_message_flg = null) { echo <<< EOL <h2>ファイルアップロード</h2> <div class="wrap"> <div class="wrap"> <table class="wp-list-table widefat striped posts"> <tr> <td>ファイルアップロード</td> <td> <form method="post" action="" enctype="multipart/form-data"> CSVを選択してアップロードボタンを押してください<br /> <input type="file" name="upfilename" /> <input type="submit" value="アップロード"> <input type="hidden" name="submit[regist_file_up]" value="on"> </form> </td> </tr> </table> </div> <form action="" method="post"> <input type='submit' name='submit[file_upload]' class='button-primary' value='戻る' /> <input type="hidden" name="form_id" value="{$form_id}"> <input type="hidden" name="create_date" value="{$create_date}"> </form> </div> EOL; }
今はデザインやレイアウトについては、割愛して書いています。
画面はこのようになります。
画面上から、ファイルを選択してアップロードボタンを押した後の処理は次のように書きました。
function regist_file_up() { //CSVファイルがアップロードされた場合 if (is_uploaded_file($_FILES["upfilename"]["tmp_name"])) { // wordpressが用意している関数 $upload_dir = wp_upload_dir(); // ファイル名を取得してアップロード処理を行う $upload_file_name = $upload_dir['basedir'] . "/" . $_FILES["upfilename"]["name"]; if (move_uploaded_file($_FILES["upfilename"]["tmp_name"], $upload_file_name)) { chmod($upload_file_name, 0777); // アップロード&ファイル権限の変更が完了したら成功とする $message = "ファイルをアップロードいたしました"; } } else { $message = "ファイルのアップロードが失敗しました"; } //完了メッセージの出力 echo <<< EOL <h2>ファイルアップロード完了</h2> <form action="" method="post"> <div class="wrap"> {$message} </div> <input type='submit' name='submit[]' class='button-primary' value='戻る' /> </form> EOL; }
書き方は一般的なファイルアップロードによる処理と、変わらないですが、「wp_upload_dir();」というwordpressが用意している関数を使っている点がポイントになります。
この関数をコールし、「$upload_dir[‘basedir’]」という値をとることにより、wordpressの「uploads」ディレクトリまでのフルパスを参照できます。
そうすることで、uploadsディレクトリ直下にファイルをアップロードすることができています。
完了後は、次のような画面になります。
これで、ファイルをアップロードが完了します。
工夫や改善の余地はありますが、基本的な流れはできているので、あとはどのように応用するかになります。