ヘルプ項目を削除できるようにします。
削除したい項目にチェックを入れて、一括操作から削除を選択します。実行ボタンをクリックすると、チェックを入れた項目をまとめて削除できるようにします。
実行ボタンをクリックしたときの処理
実行ボタンをクリックすると、POSTが送信されます。管理ページトップのPOSTは、validate_top関数で検証していますので、この関数を修正することになります。
(onlinehelp_admin.php : validate_top : 257-276行目を追加)
public function validate_top($command)
{
// 現在の状態の取得
$product = filter_input(INPUT_POST, 'product');
$category = filter_input(INPUT_POST, 'category');
// 絞り込み状態
if ($product !== 'none') {
$this->settings['product'] = intval($product);
}
if ($category !== 'none') {
$this->settings['category'] = intval($category);
}
// 押されたボタンによって分岐
switch ($command) {
case 'new':
$this->form = 'new';
break;
case 'operation':
$operation = filter_input(INPUT_POST, 'operation');
if ($operation !== 'delete') {
return;
}
$selected = filter_input(INPUT_POST, 'cb-select', FILTER_DEFAULT, FILTER_FORCE_ARRAY);
if (empty($selected)) {
return;
}
// 選択されている項目を削除する
global $onlinehelp_db;
if ($onlinehelp_db->delete_helps($selected)) {
$this->message = '削除しました。';
} else {
$this->message = '削除に失敗しました。';
}
break;
case 'edit':
global $onlinehelp_db;
(257行目)
実行ボタンには ‘opereation’ という値を付けています。
(258-261行目)
一括操作の選択ボックスで「削除」が選択されているか確認します。「削除」が選択されている場合、’delete’ の文字列が取得されます。’delete’ ではない場合、処理をここで中断します。
(263-266行目)
チェックを入れている項目を配列で取得します。配列が空の場合、つまり何もチェックされていない場合、ここで処理を中断します。
(269-275行目)
チェックされている項目を、データベースのテーブルから削除します。実際の削除処理は、Fow_OnlineHelp_DBクラスに記述します。
データベースから削除する
Fow_OnlineHelp_DBクラスに、delete_helps 関数を追加します。
(onlinehelp_db.php : 8-25行目追加)
class Fow_OnlineHelp_DB
{
/**
* ヘルプ項目を削除する
* @param array $helps 削除するヘルプIDの配列
* @return bool 成否
*/
public function delete_helps($helps)
{
if ((!is_array($helps)) || (empty($helps))) {
return false;
}
global $wpdb;
$table = $wpdb->prefix . Fow_OnlineHelp_Lib::FOW_OH_TABLES['helpbody'];
$sql = "DELETE FROM $table WHERE help_id IN (" . implode(',', $helps) . ");";
return $wpdb->query($sql);
}
複数のレコードをまとめて削除したいので、$wpdb->query を使用します。この関数は、SQL文を直接指定して実行できます。
以上でヘルプ項目を削除できるようになりました。正常に動作するか、確認しておきましょう。