web-dev-qa-db-ja.com

Users.phpにボタンを追加してください

私は列を追加することによって表示されるusers.phpテーブルに各ユーザーのメタデータを追加するプラグインに取り組んでいます。これは完了しましたが、押されたときにユーザーのメタデータを削除するボタンも追加したいと思います。追加方法がわかりません。 「変更」ボタンの右側に表示したいのですが。この動作はページをリロードすることであると考えましたが、その場合は、各ユーザーのメタデータを削除するようにします。

そのボタンをどこからページに追加しますか?これはこれに取り組むための最良の方法ですか?

ありがとうございます。

2
graphical_force

あなたが言ったようにボタンを追加することができます。しかし、これにはもっと多くのコードが必要になると思います。 users.phpページではWP List Tableクラスを使用しています。つまり、bulk actionsにフックしてそこにカスタム値を追加できます。

それでは、一括アクションのドロップダウンボックスに新しい値を追加する関数を作成しましょう。

add_action('admin_footer', 'my_user_del_button');
function my_user_del_button() {
    $screen = get_current_screen();
    if ( $screen->id != "users" )   // Only add to users.php page
        return;
    ?>
    <script type="text/javascript">
        jQuery(document).ready(function($) {
            $('<option>').val('del_user_meta').text('Delete User Meta').appendTo("select[name='action']");
        });
    </script>
    <?php
}

これにより、[ユーザーメタの削除]値が一括操作のドロップダウンボックスに追加されます。今、送信されているデータを実際に処理する関数が必要です。

add_action('load-users.php', 'my_users_page_loaded');
function my_users_page_loaded() {
    if(isset($_GET['action']) && $_GET['action'] === 'del_user_meta') {  // Check if our custom action was selected
        $del_users = $_GET['users'];  // Get array of user id's which were selected for meta deletion
        if ($del_users) {  // If any users were selected
            foreach ($del_users as $del_user) {
            delete_user_meta($del_user, 'YOUR_METADATA_KEY_TO_BE_REMOVED');  // Change this meta key to match the key you would like to delete; or an array of keys.
            }
        }
    }
}

ここでは、横にチェックマークを付けた各ユーザーについて繰り返します。次に、選択した各ユーザーに指定したmeta_keyを削除します。

注:YOUR_METADATA_KEY_TO_BE_REMOVED文字列を実際に削除したいmeta_keyの名前に変更する必要があります。複数のメタキーを削除したい場合は、複数のdelete_user_meta()関数を追加する必要があります。

5
josh

admin_footerフックを使用したJavaScriptのアプローチは@joshが言及していることがほとんどの場合うまくいきますが。一括アクションのドロップダウンにオプションを追加することは間違いなく最善の方法ではありません。そのための特別なフックがあるので、そうです! bulk_actions-{$screen_id}フィルタフックを試してください。

add_filter('bulk_actions-users', function($actions) {
    $actions['foo'] = __('Foo bar', 'my-namespace');
    return $actions;
});

ビューの準備ができたら、そのアクション用にコントローラを設定します。 handle_bulk_actions-{$screen_id}フィルタフックを使うところ。

add_filter('handle_bulk_actions-users', function($redirect, $action, $ids) {
    foreach ($ids as $id) {
        // Perform action for specific id.
    }
    return $redirect;
}, 10, 3);

出典: カスタム一括操作

1
Fleuv