wpdbを使用してwordpressのデータベーステーブルの特定の行を削除する方法は?

G・アショク・クマール

すべてを試しましたが、ワードプレスでテーブルの特定の行を削除する方法がわかりません。

テーブル内の特定の行を削除する方法を教えてください。ワードプレス プラグインを実行しています。

wpdb を使用すると言う人もいますが、その方法がわかりません

ここに私のコード

<table class="wp-list-table widefat fixed striped users" id="list" style="margin-top:10px;">
<tr>
<th class="center"><span>ID</span></th>
<th class="center"><span>Title</span></th>
<th class="center"><span>Action</span></th>
</tr>
<?php 
if(!empty($event_list))
{
$arrlen = count($event_list);
for ($i=0; $i<$arrlen; $i++)
{
?>
<tr>
<td><?php echo $event_list[$i]['id'] ?></td>
<td><?php echo $event_list[$i]['title'] ?></td>
<td><a class="delete" href="<?php echo site_url();?>/wp-admin/admin.php?page=newslist">Delete</a></td>
</tr>
<?php
}
}
else
{
?>
<td>No Records Found</td>
<?php }?>
</table>
Dzmitry kushnarou

$wpdbdelete方法を使用できます

global $wpdb;
$wpdb->delete( $wpdb->posts, [ 'ID' => 1 ], [ '%d' ] );
// the code above will delete the post with ID 1
// (this is just an example; if you need to delete a post,
// use wp_delete_post() instead)

次の引数を受け入れます。

  • テーブルの名前。通常、WordPress のテーブルにはプレフィックス (something_tablename など) があり、このプレフィックスは WordPress のインストール中に設定され、サイトによって異なります。$wpdb->prefix( のように$wpdb->prefix . 'tablename')を使用して前に付けることができます。標準テーブルには$wpdb->tablename($wpdb->postsつまり、 と同じです$wpdb->prefix . 'posts') のようにアクセスできますが、これは WordPress 自体によって作成されたテーブルに対してのみ機能し、ユーザーが作成したテーブルに対しては機能しません。
  • 削除する必要がある行を指定する配列。配列内の各項目は 1 つの条件を指定します。配列キーはフィールド名、配列値はフィールド値です。したがって、['field' => 123]行に がある場合は行を削除します`field` = '123'条件は AND ロジックを使用して結合されるため、 を指定する['field' => 123, 'otherfield' => 456]と、両方がある 場合にのみ行が削除され`field` = '123' AND `otherfield` = '456'ます。
  • 3 番目の引数は、フィールドの値の形式を指定できます。3 番目の引数の配列の項目数は、2 番目の引数の配列の項目数に対応している必要があります。'%d'整数%s意味し、文字列(これはデフォルト値) を%f意味し、浮動小数点値意味します

のドキュメントは$wpdbWordPress クラスのリファレンス ページにあります

より複雑な削除ロジック ( だけfield = 'something'でなく、他の比較) が必要な場合は、SQL を自分で作成し、 で実行する必要がある場合があります。ドキュメントの「一般的なクエリの実行$wpdb->query(...)」を参照してください


あなたのコードについて。

現在、あなたのコードでは、deleteリンクには削除したいものに関する情報が保存されていません。のように、渡す必要がありadmin.php?page=newslist&eventid=<?php echo esc_attr($event_list[$i]['id']); >ます。次に、次のように にアクセスして、eventidを使用して削除できます$_GET['eventid']

if (!empty($_GET['eventid'])) {
  $wpdb->delete( $wpdb->prefix . 'events',
                 [ 'ID' => $_GET['eventid'] ],
                 [ '%d' ] );
}

これはないあなたがGETリクエストを作成していることから、これを行う際に推奨されます。GET リクエストは、情報を取得するために使用する必要があり、送信するためではありません。また、何かを削除することは間違いなく変更です。

GET リクエストはすべての情報を URL に保存するため、ユーザーが誤って「削除」ページをブックマークしてしまう可能性がありますが、これは私たちが望んでいるものではありません。また、セキュリティ プラグインは通常、クロスサイト POST リクエストを検出してブロックできますが、GET リクエストは検出できません。したがって、サイトは vunerable になります (ただし、これは nonce を使用することで軽減できます)。

推奨される方法は、削除アクションを POST リクエストにすることです。このために、次のようなフォームを使用できます。

<tr>
  <td><?php echo $event_list[$i]['id'] ?></td>
  <td><?php echo $event_list[$i]['title'] ?></td>
  <td>
    <form action="<?php echo admin_url('admin-post.php'); ?>" method="POST">
      <!-- nonce should go here for security -->
      <input type="hidden" name="action" value="my_delete_event">
      <input type="hidden" name="eventid" value="<?php echo $event_list[$i]['id']; ?> ">
      <input type="submit" class="delete" value="Delete" />
    </form>
  </td>
</tr>

このコードを機能させるにmy_delete_eventは、実際にイベントを削除するアクションを登録して(これを任意の名前に変更して)、ページにリダイレクトする必要があります。

//put this code outside of all the functions
//it should be run when plugin is initialised

add_action( 'admin_post_my_delete_event', function () {
  // Remove the event with specified eventid
  if (!empty($_POST['eventid'])) {
    // Nonce verification should go here, for security
    $wpdb->delete( $wpdb->prefix . 'events',
                   [ 'ID' => $_POST['eventid'] ],
                   [ '%d' ] );
  }
  //Redirect to admin.php?page=newslist
  wp_redirect(admin_url('/admin.php?page=newslist'));
  exit;
});

これは優れていますが、まだ十分に安全ではありません。攻撃者はリンクを作成できませんが、サイトに同じフォームを作成し、サイト管理者をだましてこのフォームのボタンをクリックさせることができます。これは私たちが望んでいるものではありません。これを修正するために、WordPress にはnonce の概念があります

nonce は、攻撃者が知らない WordPress によって生成される情報の一部です。それをフォーム (またはリンク内の URL) に添付し、削除する前に確認してください。それが正しい場合、実際の管理者が削除を行っています。nonce を追加するには、次のようなものを使用できます。

<tr>
  <td><?php echo $event_list[$i]['id'] ?></td>
  <td><?php echo $event_list[$i]['title'] ?></td>
  <td>
    <form action="<?php echo admin_url('admin-post.php'); ?>" method="POST">
      <?php wp_nonce_field( 'my_delete_event_' . $event_list[$i]['id'] ); ?>
      <input type="hidden" name="action" value="my_delete_event">
      <input type="hidden" name="eventid" value="<?php echo $event_list[$i]['id']; ?> ">
      <input type="submit" class="delete" value="Delete" />
    </form>
  </td>
</tr>

代わりに、'my_delete_event_' . $event_list[$i]['id']任意の文字列を使用できますが、削除されたイベントのイベント ID を含める方がよいでしょう。

そして、正しい nonce が渡されていることを確認するには、関数を使用できますcheck_admin_referer

//put this code outside of all the functions
//it should be run when plugin is initialised

add_action( 'admin_post_my_delete_event', function () {
  // Remove the event with specified eventid
  if (!empty($_POST['eventid'])) {
    $event_id = $_POST['eventid'];
    check_admin_referer( 'my_delete_event_' . $event_id );
    $wpdb->delete( $wpdb->prefix . 'events',
                   [ 'ID' => $event_id ],
                   [ '%d' ] );
  }
  //Redirect to admin.php?page=newslist
  wp_redirect(admin_url('/admin.php?page=newslist'));
  exit;
});

check_admin_refererは、フォームと削除コードで同じ文字列が使用されているかどうかをチェックするため、 で文字列を変更する場合はwp_nonce_field、 も変更するようにしてくださいcheck_admin_referer文字列は任意ですが、どちらの場合も同じである必要があります。

check_admin_referernonce が間違っている場合は、すべてを停止してエラーを表示するだけなので、if (...) { ... }ステートメントは必要ありません

実際には、check_admin_refererノンスだけでなくブラウザのリファラーページもチェックして、リクエストが外部ページからではなくサイトからのものであることを確認し、wp_nonce_field比較するために予期されるリファラーフィールドを挿入します。

この情報がプラグインを完成させるのに十分であることを願っています。いいえの場合は、詳細をお問い合わせください。がんばろう!:)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

テーブル内のボタンを使用してデータベースから行を削除する(PHP)

分類Dev

WordPressの$ wpdbを使用してデータベース行を取得するときにint列が文字列として返されるのはなぜですか?

分類Dev

whileループのボタンを使用して特定のデータベース行を削除する

分類Dev

jQueryのを使用して、動的テーブルの特定の行を削除する方法

分類Dev

データベースmongodbを使用してlaravelの3つのテーブルを結合する方法は?

分類Dev

wordpress $ wpdbを使用して、<table>内のデータベースのデータを表示します

分類Dev

テーブル内の特定の行をクリックしたときに、データベース内の特定の行のデータを表示する方法

分類Dev

WordPressのwpdbクラスを使用して外部データベースにアクセスする

分類Dev

MySQLデータベースのすべてのテーブルから特定の行を削除するにはどうすればよいですか?

分類Dev

3つの異なるテーブルでwhileループを使用してデータベースの特定の列をエコーする方法

分類Dev

すべてのテーブルを削除し、Azure SQLデータベースをリセットする方法

分類Dev

AJAXを使用して、特定のデータベースのテーブルからデータを取得します

分類Dev

PysparkとHiveを使用して特定のデータベースのテーブルを表示する

分類Dev

codeigniter-データベースで削除せずに特定のテーブル行を削除します

分類Dev

mysqlデータベースのn行のテーブルを削除します

分類Dev

JSoupを使用してhtmlWebページのテーブルから特定の行データを抽出する方法

分類Dev

データベーステーブルの行をフィルタリングし、djangoの特定の列を更新する方法は?

分類Dev

データテーブルで選択したアイテムを配列として使用する方法は、laravelを使用して行ごとにリストされているすべてのデータをデータベースに保存します

分類Dev

Azureポータルを使用してCosmosDBデータベースをクリアする方法またはすべてのアイテムを削除する方法

分類Dev

[php]コードを使用して1つの特定の[mysql]データベーステーブルからデータリストをプルしていますが、実際にデータをプルしているのは最初の<option> </ option>のみです。

分類Dev

データベースに画像を取得し、特定の行のテーブルの「tooltipText()」として設定する方法

分類Dev

データベースから特定の値を取得し、それをテーブルではなくプレーンテキストとして表示する方法

分類Dev

特定のテーブルの列に特定のタイプがあるすべてのデータベースをリストする方法は?

分類Dev

PHPで特定のmysqlデータベースのすべてのテーブル名を表示する方法

分類Dev

Java、Hibernateを使用してデータベーステーブルに一意の行を挿入する

分類Dev

PHPを使用してデータベースのテーブルをスキップする方法

分類Dev

PHPを使用してデータベースのテーブルをスキップする方法

分類Dev

一部のテーブルを除くすべてのテーブルのデータをデータベースから削除する方法

分類Dev

ローカル データベース テーブルのすべての行を選択する方法

Related 関連記事

  1. 1

    テーブル内のボタンを使用してデータベースから行を削除する(PHP)

  2. 2

    WordPressの$ wpdbを使用してデータベース行を取得するときにint列が文字列として返されるのはなぜですか?

  3. 3

    whileループのボタンを使用して特定のデータベース行を削除する

  4. 4

    jQueryのを使用して、動的テーブルの特定の行を削除する方法

  5. 5

    データベースmongodbを使用してlaravelの3つのテーブルを結合する方法は?

  6. 6

    wordpress $ wpdbを使用して、<table>内のデータベースのデータを表示します

  7. 7

    テーブル内の特定の行をクリックしたときに、データベース内の特定の行のデータを表示する方法

  8. 8

    WordPressのwpdbクラスを使用して外部データベースにアクセスする

  9. 9

    MySQLデータベースのすべてのテーブルから特定の行を削除するにはどうすればよいですか?

  10. 10

    3つの異なるテーブルでwhileループを使用してデータベースの特定の列をエコーする方法

  11. 11

    すべてのテーブルを削除し、Azure SQLデータベースをリセットする方法

  12. 12

    AJAXを使用して、特定のデータベースのテーブルからデータを取得します

  13. 13

    PysparkとHiveを使用して特定のデータベースのテーブルを表示する

  14. 14

    codeigniter-データベースで削除せずに特定のテーブル行を削除します

  15. 15

    mysqlデータベースのn行のテーブルを削除します

  16. 16

    JSoupを使用してhtmlWebページのテーブルから特定の行データを抽出する方法

  17. 17

    データベーステーブルの行をフィルタリングし、djangoの特定の列を更新する方法は?

  18. 18

    データテーブルで選択したアイテムを配列として使用する方法は、laravelを使用して行ごとにリストされているすべてのデータをデータベースに保存します

  19. 19

    Azureポータルを使用してCosmosDBデータベースをクリアする方法またはすべてのアイテムを削除する方法

  20. 20

    [php]コードを使用して1つの特定の[mysql]データベーステーブルからデータリストをプルしていますが、実際にデータをプルしているのは最初の<option> </ option>のみです。

  21. 21

    データベースに画像を取得し、特定の行のテーブルの「tooltipText()」として設定する方法

  22. 22

    データベースから特定の値を取得し、それをテーブルではなくプレーンテキストとして表示する方法

  23. 23

    特定のテーブルの列に特定のタイプがあるすべてのデータベースをリストする方法は?

  24. 24

    PHPで特定のmysqlデータベースのすべてのテーブル名を表示する方法

  25. 25

    Java、Hibernateを使用してデータベーステーブルに一意の行を挿入する

  26. 26

    PHPを使用してデータベースのテーブルをスキップする方法

  27. 27

    PHPを使用してデータベースのテーブルをスキップする方法

  28. 28

    一部のテーブルを除くすべてのテーブルのデータをデータベースから削除する方法

  29. 29

    ローカル データベース テーブルのすべての行を選択する方法

ホットタグ

アーカイブ