WordPressはそもそもMySQLを利用しているシステムなので当然かもしれませんが、データベースへのアクセスに便利なクラス$wpdbが用意されています。
投稿、または固定ページの一つ(postIDが一番ちいさいもの)を取得します。
1 2 3 |
$query = "SELECT * FROM $wpdb->posts"; $select_result = $wpdb->get_row($query); echo "<p>$select_result->ID : $select_result->post_title</p>"; |
$wpdb は関数内で使うときは、globalで利用できるようにします。
1 2 3 4 5 6 7 |
function myFirstPosts(){ global $wpdb; $query = "SELECT * FROM $wpdb->posts"; $select_result = $wpdb->get_row($query); echo "<p>$select_result->ID : $select_result->post_title</p>"; } myFirstPosts(); |
get_row の代わりに、get_results をつかうと複数行を取り出すことが出来ます。
というか、こっちが普通のSELECTですね。
1 2 3 4 5 6 7 8 9 |
function myAllPosts(){ global $wpdb; $query = "SELECT * FROM $wpdb->posts"; $select_result = $wpdb->get_results($query); foreach ($select_result as $row){ echo "<p>$row->ID : $row->post_title</p>"; } } myAllPosts(); |
独自のテーブルを作成するときは、$wpdb->query を使ってCREATE文できますが、dbDelta を使ったほうがいいです。
$wpdb->prefix でWPのプレフィックスを取得できます。
1 2 3 4 5 6 7 8 9 |
function createMyCustamTable($tableName){ global $wpdb; $sql = "CREATE TABLE " . $wpdb->prefix . $tableName . " ( id bigint(20) unsigned PRIMARY KEY AUTO_INCREMENT, name varchar(250) ) " . $wpdb->get_charset_collate() . ";"; dbDelta($sql); } createMyCustamTable("testTable"); |
ただし、dbDeltaを利用する場合、
・1行につき1つのフィールドを定義する。
・PRIMARY KEYと主キーの定義の間には二つのスペースが必要。
・INDEXという言葉ではなく、KEYという言葉を使う必要がある。
という制約があるので、これらを知らずにつかおうとすると、SQL文そのものがMySQL的にバッチリでもCREATEできなくて、ハマります。
独自のテーブルからSELECTする場合。
1 2 3 4 5 6 7 8 9 |
function myAllCustamTable($tableName){ global $wpdb; $query = "SELECT * FROM " . $wpdb->prefix . $tableName; $select_result = $wpdb->get_results($query); foreach ($select_result as $row){ echo "<p>$row->id : $row->name</p>"; } } myAllCustamTable("testTable"); |
DELETEなど、データを取得しないクエリの場合、$wpdb->query を使う。(ただし、普通に削除する場合は後述の$wpdb->deleteがあるので、そっちを使う)
1 2 3 4 5 6 |
function deleteMyCustamTable($tableName , $id){ global $wpdb; $query = "DELETE FROM " . $wpdb->prefix . $tableName . " WHERE id=$id"; $wpdb->query($query); } deleteMyCustamTable("testTable" , 1); |
行を追加する場合も、$wpdb->queryが使えますが、ユーザーの入力内容をSQL文に入れる場合など、SQLインジェクション攻撃対策が必要な場合は、$wpdb->prepareを使う。
1 2 3 4 5 6 7 8 9 |
function insertMyCustamTable($tableName , $id , $name){ global $wpdb; $query = "INSERT INTO INSERT INTO " . $wpdb->prefix . $tableName (id, name) VALUES (%d , %s)"; $wpdb->prepare($query , $id , $name); } insertMyCustamTable("testTable" , 1 , "TEST1"); |
行を追加するには、$wpdb->insertを使うと便利な上に、SQLインジェクション攻撃対策も同時になされるので安心。
1 |
$wpdb->insert('testTable', array( 'id' => 2, 'name' => 'TEST2' )); |
更新も$wpdb->updateが用意されています。
1 |
$wpdb->update('testTable', array( 'id' => 2, 'name' => 'TEST' )); |
行を削除するには、$wpdb->deleteを使います。
1 |
$wpdb->delete( $wpdb->posts, array( 'ID' => 2 ) ); |
取得したデータのカラム名など調べたければ、SELECTなどのあとに $wpdb->get_col_info で調べられます。
1 2 3 4 5 6 |
$query = "SELECT * FROM $wpdb->posts"; $select_result = $wpdb->get_results($query); $colInfo = $wpdb->get_col_info('type', offset); foreach ($colInfo as $col){ echo "<p>$col</p>"; } |
SELECTするまえにカラム名を調べたければ、wpdb->get_col で取得したほうが手っ取り早い。
1 2 3 4 5 |
$query = "DESC $wpdb->posts"; $colInfo = $wpdb->get_col($query); foreach ($colInfo as $col){ echo "<p>$col</p>"; } |
ちなみに、DESC は、DESCRIBE と同じ。(MySQL DESCRIBE)
$wpdbのメソッド一覧 https://developer.wordpress.org/reference/files/wp-includes/wp-db.php/
$wpdbの中身を見てみますと。。。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
<b>object</b>(<i>wpdb</i>)[<i>1</i>] <i>public</i> 'show_errors' <span style="color: #888a85;">=></span> <small>boolean</small> <span style="color: #75507b;">false</span> <i>public</i> 'suppress_errors' <span style="color: #888a85;">=></span> <small>boolean</small> <span style="color: #75507b;">false</span> <i>public</i> 'last_error' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">''</span> <i>(length=0)</i> <i>public</i> 'num_queries' <span style="color: #888a85;">=></span> <small>int</small> <span style="color: #4e9a06;">21</span> <i>public</i> 'num_rows' <span style="color: #888a85;">=></span> <small>int</small> <span style="color: #4e9a06;">0</span> <i>public</i> 'rows_affected' <span style="color: #888a85;">=></span> <small>int</small> <span style="color: #4e9a06;">0</span> <i>public</i> 'insert_id' <span style="color: #888a85;">=></span> <small>int</small> <span style="color: #4e9a06;">0</span> <i>public</i> 'last_query' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy = 'nav_menu' AND t.name = 'メインメニュー' LIMIT 1'</span> <i>(length=175)</i> <i>public</i> 'last_result' <span style="color: #888a85;">=></span> <b>array</b> <i>(size=0)</i> <i><span style="color: #888a85;">empty</span></i> <i>protected</i> 'result' <span style="color: #888a85;">=></span> <b>resource</b>(<i>131</i><span style="color: #2e3436;">,</span> <i>mysql result</i>) <i>protected</i> 'col_meta' <span style="color: #888a85;">=></span> <b>array</b> <i>(size=1)</i> 'wp_terms' <span style="color: #888a85;">=></span> <b>array</b> <i>(size=4)</i> 'term_id' <span style="color: #888a85;">=></span> <b>object</b>(<i>stdClass</i>)[<i>2267</i>] ... 'name' <span style="color: #888a85;">=></span> <b>object</b>(<i>stdClass</i>)[<i>2268</i>] ... 'slug' <span style="color: #888a85;">=></span> <b>object</b>(<i>stdClass</i>)[<i>2262</i>] ... 'term_group' <span style="color: #888a85;">=></span> <b>object</b>(<i>stdClass</i>)[<i>2406</i>] ... <i>protected</i> 'table_charset' <span style="color: #888a85;">=></span> <b>array</b> <i>(size=1)</i> 'wp_terms' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'utf8'</span> <i>(length=4)</i> <i>protected</i> 'check_current_query' <span style="color: #888a85;">=></span> <small>boolean</small> <span style="color: #75507b;">true</span> <i>private</i> 'checking_collation' <span style="color: #888a85;">=></span> <small>boolean</small> <span style="color: #75507b;">false</span> <i>protected</i> 'col_info' <span style="color: #888a85;">=></span> <span style="color: #3465a4;">null</span> <i>public</i> 'queries' <span style="color: #888a85;">=></span> <span style="color: #3465a4;">null</span> <i>protected</i> 'reconnect_retries' <span style="color: #888a85;">=></span> <small>int</small> <span style="color: #4e9a06;">5</span> <i>public</i> 'prefix' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'wp_'</span> <i>(length=5)</i> <i>public</i> 'base_prefix' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'wp_'</span> <i>(length=5)</i> <i>public</i> 'ready' <span style="color: #888a85;">=></span> <small>boolean</small> <span style="color: #75507b;">true</span> <i>public</i> 'blogid' <span style="color: #888a85;">=></span> <small>int</small> <span style="color: #4e9a06;">0</span> <i>public</i> 'siteid' <span style="color: #888a85;">=></span> <small>int</small> <span style="color: #4e9a06;">0</span> <i>public</i> 'tables' <span style="color: #888a85;">=></span> <b>array</b> <i>(size=9)</i> 0 <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'posts'</span> <i>(length=5)</i> 1 <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'comments'</span> <i>(length=8)</i> 2 <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'links'</span> <i>(length=5)</i> 3 <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'options'</span> <i>(length=7)</i> 4 <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'postmeta'</span> <i>(length=8)</i> 5 <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'terms'</span> <i>(length=5)</i> 6 <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'term_taxonomy'</span> <i>(length=13)</i> 7 <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'term_relationships'</span> <i>(length=18)</i> 8 <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'commentmeta'</span> <i>(length=11)</i> <i>public</i> 'old_tables' <span style="color: #888a85;">=></span> <b>array</b> <i>(size=3)</i> 0 <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'categories'</span> <i>(length=10)</i> 1 <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'post2cat'</span> <i>(length=8)</i> 2 <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'link2cat'</span> <i>(length=8)</i> <i>public</i> 'global_tables' <span style="color: #888a85;">=></span> <b>array</b> <i>(size=2)</i> 0 <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'users'</span> <i>(length=5)</i> 1 <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'usermeta'</span> <i>(length=8)</i> <i>public</i> 'ms_global_tables' <span style="color: #888a85;">=></span> <b>array</b> <i>(size=7)</i> 0 <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'blogs'</span> <i>(length=5)</i> 1 <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'signups'</span> <i>(length=7)</i> 2 <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'site'</span> <i>(length=4)</i> 3 <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'sitemeta'</span> <i>(length=8)</i> 4 <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'sitecategories'</span> <i>(length=14)</i> 5 <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'registration_log'</span> <i>(length=16)</i> 6 <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'blog_versions'</span> <i>(length=13)</i> <i>public</i> 'comments' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'wp_comments'</span> <i>(length=13)</i> <i>public</i> 'commentmeta' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'wp_commentmeta'</span> <i>(length=16)</i> <i>public</i> 'links' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'wp_links'</span> <i>(length=10)</i> <i>public</i> 'options' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'wp_options'</span> <i>(length=12)</i> <i>public</i> 'postmeta' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'wp_postmeta'</span> <i>(length=13)</i> <i>public</i> 'posts' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'wp_posts'</span> <i>(length=10)</i> <i>public</i> 'terms' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'wp_terms'</span> <i>(length=10)</i> <i>public</i> 'term_relationships' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'wp_term_relationships'</span> <i>(length=23)</i> <i>public</i> 'term_taxonomy' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'wp_term_taxonomy'</span> <i>(length=18)</i> <i>public</i> 'usermeta' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'wp_usermeta'</span> <i>(length=13)</i> <i>public</i> 'users' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'wp_users'</span> <i>(length=10)</i> <i>public</i> 'blogs' <span style="color: #888a85;">=></span> <span style="color: #3465a4;">null</span> <i>public</i> 'blog_versions' <span style="color: #888a85;">=></span> <span style="color: #3465a4;">null</span> <i>public</i> 'registration_log' <span style="color: #888a85;">=></span> <span style="color: #3465a4;">null</span> <i>public</i> 'signups' <span style="color: #888a85;">=></span> <span style="color: #3465a4;">null</span> <i>public</i> 'site' <span style="color: #888a85;">=></span> <span style="color: #3465a4;">null</span> <i>public</i> 'sitecategories' <span style="color: #888a85;">=></span> <span style="color: #3465a4;">null</span> <i>public</i> 'sitemeta' <span style="color: #888a85;">=></span> <span style="color: #3465a4;">null</span> <i>public</i> 'field_types' <span style="color: #888a85;">=></span> <b>array</b> <i>(size=34)</i> 'post_author' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'post_parent' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'menu_order' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'term_id' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'term_group' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'term_taxonomy_id' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'parent' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'count' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'object_id' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'term_order' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'ID' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'comment_ID' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'comment_post_ID' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'comment_parent' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'user_id' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'link_id' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'link_owner' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'link_rating' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'option_id' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'blog_id' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'meta_id' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'post_id' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'user_status' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'umeta_id' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'comment_karma' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'comment_count' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'active' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'cat_id' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'deleted' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'lang_id' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'mature' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'public' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'site_id' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> 'spam' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'%d'</span> <i>(length=2)</i> <i>public</i> 'charset' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'utf8'</span> <i>(length=4)</i> <i>public</i> 'collate' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">''</span> <i>(length=0)</i> <i>protected</i> 'dbuser' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'root'</span> <i>(length=4)</i> <i>protected</i> 'dbpassword' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'password'</span> <i>(length=12)</i> <i>protected</i> 'dbname' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'wordpress'</span> <i>(length=9)</i> <i>protected</i> 'dbhost' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'host'</span> <i>(length=2)</i> <i>protected</i> 'dbh' <span style="color: #888a85;">=></span> <b>resource</b>(<i>21</i><span style="color: #2e3436;">,</span> <i>mysql link</i>) <i>public</i> 'func_call' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'$db->query("SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy = 'nav_menu' AND t.name = 'メインメニュー' LIMIT 1")'</span> <i>(length=189)</i> <i>public</i> 'is_mysql' <span style="color: #888a85;">=></span> <small>boolean</small> <span style="color: #75507b;">true</span> <i>protected</i> 'incompatible_modes' <span style="color: #888a85;">=></span> <b>array</b> <i>(size=5)</i> 0 <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'NO_ZERO_DATE'</span> <i>(length=12)</i> 1 <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'ONLY_FULL_GROUP_BY'</span> <i>(length=18)</i> 2 <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'STRICT_TRANS_TABLES'</span> <i>(length=19)</i> 3 <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'STRICT_ALL_TABLES'</span> <i>(length=17)</i> 4 <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'TRADITIONAL'</span> <i>(length=11)</i> <i>private</i> 'use_mysqli' <span style="color: #888a85;">=></span> <small>boolean</small> <span style="color: #75507b;">false</span> <i>private</i> 'has_connected' <span style="color: #888a85;">=></span> <small>boolean</small> <span style="color: #75507b;">true</span> <i>public</i> 'categories' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'wp_categories'</span> <i>(length=15)</i> <i>public</i> 'post2cat' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'wp_post2cat'</span> <i>(length=13)</i> <i>public</i> 'link2cat' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'wp_link2cat'</span> <i>(length=13)</i> |