私は列を追加することによって表示されるusers.phpテーブルに各ユーザーのメタデータを追加するプラグインに取り組んでいます。これは完了しましたが、押されたときにユーザーのメタデータを削除するボタンも追加したいと思います。追加方法がわかりません。 「変更」ボタンの右側に表示したいのですが。この動作はページをリロードすることであると考えましたが、その場合は、各ユーザーのメタデータを削除するようにします。
そのボタンをどこからページに追加しますか?これはこれに取り組むための最良の方法ですか?
ありがとうございます。
あなたが言ったようにボタンを追加することができます。しかし、これにはもっと多くのコードが必要になると思います。 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()
関数を追加する必要があります。
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);
出典: カスタム一括操作