ヘルプ項目を削除できるようにする – WordPressプラグインの作成 22

投稿者: | 2018年9月28日

ヘルプ項目を削除できるようにします。
削除したい項目にチェックを入れて、一括操作から削除を選択します。実行ボタンをクリックすると、チェックを入れた項目をまとめて削除できるようにします。

実行ボタンをクリックしたときの処理

実行ボタンをクリックすると、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文を直接指定して実行できます。

以上でヘルプ項目を削除できるようになりました。正常に動作するか、確認しておきましょう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)