WordPressで$wpdbを使用してデータベース操作(取得、挿入、更新、削除)する方法

投稿日:2024年04月12日(金) 更新日:2024年09月29日(日)
WordPressで$wpdbを使用してデータベース操作(取得、挿入、更新、削除)する方法|UMENOKI|すぐに仕事で使えるIT技術情報メディア

みなさんこんにちは!エンジニアの高澤です!

今回はWordPressで$wpdbを使用してデータベース操作(取得、挿入、更新、削除)する方法について解説していきたいと思います。

今回の内容はどちらかというと上級者向けの内容になりますが、初心者エンジニアの方も当記事をぜひお読みいただき、WordPressにおけるSQLベースのデータベース操作についてしっかり学んでいただけましたら幸いです。

$wpdbとは

WordPressのデータベースを操作するためのグローバルオブジェクトです。

WordPressデータベースを直接操作するためのメソッドやプロパティを提供します。主に、独自にデータベース操作やテーブルへのクエリの実行に使用されます。

ちなみに「クエリ」とは、データベースに対して情報を取得したり、挿入したり、更新したり、削除したりするためのSQL文のことを指します。

WordPressの$wpdbクラスを使用すると、これらのクエリを実行するためのメソッドを使用することができます。

$wpdbは以下の一行でオブジェクトを読み出して使用することが可能です。

// WordPressのデータベースオブジェクトをグローバル変数として取得
global $wpdb;

通常では、例えばテーマ開発などではWordPress専用のテンプレートタグ(関数)がすでに用意されていて、get_the_title()関数やget_the_content()関数などで記事タイトルや本文を取得したりするかと思いますが、いずれの関数も内部ではデータベースの操作を行なわれており、データ操作を抽象化しています。

$wpdbでは、専用のメソッド(insertやupdateなど)、またSQL文を使ってより自由度高くデータベース操作が可能となりますが、そのぶんエンジニア初心者の方がミスをしてデータベース操作を間違えてしまうとデータが破損してしまったりするため、リスクがあります。

なので、おすすめとしてはよっぽどのことがない限りは基本的にWordPressで用意されているテンプレートタグを使い、テンプレートタグなどでは対応できない領域の処理や、独自のテーブル(データベース)の操作が必要になったら$wpdbを使用していただくことをおすすめいたします。

どんな場面で必要になるのか?

$wpdbについてわかったところで、どんな場面で必要になるのかを解説していきたいと思います。

事前にどんな場面で必要になるのかを把握しておくことは実装のイメージを掴む上で重要です。

なぜならば「何のために使うの?」と疑問を持ったままで終わってしまうと、今後自分から技術を使おうという気持ちにならず結局技術を自分のものにできないからです。

なのでここでしっかり理解しておきましょう。

結論、$wpdbはWordPressのデータベースに直接アクセスする必要がある場面で必要になります。

主な場面としては以下の内容になります。

  • 独自で作成したデータベース操作
  • 高度なデータベースクエリ
  • パフォーマンスの最適化

それぞれ解説いたします。

独自で作成したデータベース操作

WordPressの標準機能やプラグイン、テーマでは対応していない、独自のデータベーステーブルを操作する必要がある場合に使用されます。

例えば、カスタムなデータを保存するためのテーブルや、外部からのデータを管理するためのテーブルなどです。

高度なデータベースクエリ

WordPressの標準機能では実現できない複雑なデータベースクエリを実行する必要がある場合に使用されます。

例えば、複数のテーブルを結合して情報を取得したり、特定の条件を満たすデータを取得したりする場合です。

パフォーマンスの最適化

WordPressの標準機能ではパフォーマンスが低下する場合に、直接データベースにアクセスしてクエリを最適化する必要がある場合に使用されます。

例えば、大量のデータを処理する際や高負荷のサイトでのパフォーマンス向上のために使用されます。

筆者が実際に使用した対応例

次に、筆者がWordPress構築において使用した例について解説いたします。

内容としては以下になります。

  • プラグイン開発
  • 高度なテーマ開発
  • データ処理の自動化

それぞれ解説していきます。

プラグイン開発

まず1点目はプラグイン開発で、$wpdbでデータベース操作のカスタマイズをしました。

おそらくデータベース内のデータ処理が必要とするプラグインだったり、またプラグインではよくあるプラグイン専用のデータベースを生成する系のものであれば、$wpdbでのデータベース操作は必須になるので、プラグイン開発を行いたい開発者の方にとっては必須といえるかと思います。

高度なテーマ開発

次に高度なテーマ開発の際に使用いたしました。

ここでいう高度なテーマ開発とは、WordPressで実装した会員登録サイトでの実装だったのですが、会員としてログイン後にアンケートページの回答をした後のその結果をデータベースに保存して処理するというときに$wpdbを使用しました。

データ処理の自動化

次はデータ処理の自動化ですが、データとはユーザーデータや記事データのことでして、特定のカスタムフィールドの値をもつユーザーのみを一括で削除する、というデータベース操作をする際に使用しました。

$wpdbでデータベース操作する方法

それでは早速$wpdbでデータベース操作する方法について解説していきたいと思います。

$wpdbでのデータベース操作は以下の4つになります。

  • $wpdbで記事データを取得する
  • $wpdbで記事データを挿入する
  • $wpdbで記事データを更新する
  • $wpdbで記事データを削除する

それぞれ解説していきたいと思います。

$wpdbで記事データを取得する

$wpdbで記事データを取得する実装について解説していきます。

以下のコードをテーマファイル内のお好きなPHPテンプレートファイルにコピー&ペーストしてください。

<?php
// WordPressのデータベースオブジェクトをグローバル変数として取得
global $wpdb;

// データベースクエリを実行し、最初の10件の投稿を取得
$results = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}posts WHERE post_type = 'post' LIMIT 10" );

// 取得した投稿をループして処理
foreach( $results as $result ):
    // 各投稿のタイトルを出力
    echo $result->post_title;
endforeach;
?>

ペーストして保存していただき、ページを更新していただけますとペーストした箇所に投稿タイプ「post」の記事一覧が表示されているかと思います。

$wpdbで記事データを挿入する

$wpdbで記事データを挿入する実装について解説していきます。

以下のコードをテーマファイル内のお好きなPHPテンプレートファイルにコピー&ペーストしてください。

<?php
global $wpdb;
// 挿入するデータを連想配列として定義
$data = array(
    'post_title' => '新しい投稿のタイトル',
    'post_content' => '新しい投稿の本文',
    'post_status' => 'publish',
    'post_author' => 1, // 投稿の著者ID
    'post_type' => 'post'
);
// 投稿を挿入
$wpdb->insert( $wpdb->posts, $data );
?>

ペーストして保存していただき、ページを更新していただけますと投稿タイプ「post」に1つ記事が新規追加されているかと思います。

$wpdbで記事データを更新する

$wpdbで記事データを更新する実装について解説していきます。

以下のコードをテーマファイル内のお好きなPHPテンプレートファイルにコピー&ペーストしてください。

<?php
global $wpdb;

// 更新するデータを連想配列として定義
$data = array(
    'post_title' => '更新された投稿のタイトル',
    'post_content' => '更新された投稿の本文',
);
// 更新する投稿の条件を指定
$where = array(
    'ID' => 123, // 更新する投稿のID
);
// 投稿を更新
$wpdb->update( $wpdb->posts, $data, $where );
?>

ペーストして保存していただき、ページを更新していただけますと投稿タイプ「post」の投稿ID「123」の記事の内容が更新されているかと思います。

$wpdbで記事データを削除する

$wpdbで記事データを削除する実装について解説していきます。

以下のコードをテーマファイル内のお好きなPHPテンプレートファイルにコピー&ペーストしてください。

<?php
global $wpdb;

// 削除する投稿の条件を指定
$where = array(
    'ID' => 123, // 削除する投稿のID
);
// 投稿を削除
$wpdb->delete( $wpdb->posts, $where );
?>

ペーストして保存していただき、ページを更新していただけますと投稿タイプ「post」の投稿ID「123」の記事が削除されているかと思います。

実装する前にバックアップを取得する

ここまで$wpdbでのデータベース操作をおこなってきましたが、必ずバックアップを取得していただくことをおすすめいたします。

当記事でおすすめのバックアッププラグインは「All-in-One WP Migration」です。

このプラグインを使って、必ずバックアップを取得しましょう。

ここからバックアップの取得方法を解説いたします。

プラグインをインストール

まずはプラグインをインストールしていきましょう。

WordPress管理画面左メニューの「プラグイン」→「新規プラグインを追加」をクリックして新規プラグインページを開きます。

画面右上にある検索ボックスに「All in One WP Migration」と入力してください。

入力が完了すると、下図のように検索結果にAll-in-One WP Migrationプラグインが表示されますので、「今すぐインストール」ボタンをクリックし、「有効化」ボタンをクリックしてください。

諸々完了したら、下図のようにAll-in-One WP Migrationプラグインの設定ページが追加されているのが確認できるかと思います。

これでAll-in-One WP Migrationプラグインのセットアップは完了し、バックアップができる状態になりました。

バックアップデータをエクスポート

セットアップが完了したら、早速バックアップしてしまいましょう。

管理画面左メニューの「All-in-One WP Migration」→「エクスポート」をクリックしてください。

すると下図のようにエクスポート画面が表示されますので、「エクスポート先」をクリックして「ファイル」をクリックしていただけますとエクスポートが始まりバックアップファイルを取得できます。

バックアップデータがデスクトップなどに保存されたら完了です。

これでいつでもこの取得したバックアップデータをもとに復旧させることができるようになりました。

バックアップデータで復旧させる方法

もし$wpdbでのデータベース操作をしていて誤ってデータベースのデータが破損してしまった場合は、先ほど取得したバックアップデータで復旧作業をおこないます。

やり方は簡単で、管理画面左メニュー「All-in-One WP Migration」→「インポート」をクリックしてください。

すると下図のようにインポート画面が表示されますので、「インポート先」付近にダウンロードしたバックアップファイルをドラッグ&ドロップしてください。

すると復旧処理が始まりますので、案内される通りに操作を進めましょう。

決して難しくはありませんのでご安心ください。

復旧ができましたら、再び実装作業に戻ってください。

まとめ

WordPressで$wpdbを使用してデータベース操作(取得、挿入、更新、削除)する方法についての解説は以上になります。

WordPressのグローバル変数である$wpdbは、直接SQLベースの処理を記述してデータベース操作を行うので上級者向けではありますが、初心者から中級者のエンジニアの方にとっては今後高度なテーマ開発も行えるようにするという意味ではおさえておくべき内容となっております。

よろしければぜひ当記事をご活用いただけましたら幸いです。

執筆者

UMENOKI編集部 高澤 翔汰

歴5年目(2024年8月以降から5年目です)のエンジニアです!
CMSでのサイト構築とWebデザイン制作を兼任して5年目になります。
自作のiOSアプリ(iPhoneアプリ)やWordPressプラグインを開発することもあり、まだまだ現在進行形で勉強中です!

お気軽に皆さんのご要望をお聞かせください!

どんなに些細なことでも構いません!よろしければ記事や当サイトへの「こんな記事があったら仕事とかで役に立つな〜」や「こうだったらもっと役に立つのに!」といったようなご要望等をお気軽にお聞かせください!今後のサービス改善にお役立てさせていただきます!

例1)Reactの技術記事を書いてほしい!
例2)WordPressの使い方とかを初心者向けに解説してほしい!...など

送信と同時にプライバシーポリシーに同意したものとします。
サンタさん