WordPressでオートインクリメントの値を投稿ページでとりあえず出力する




オートインクリメントって?

簡単に説明するとDBにデータを格納するときに、IDを自動採番してくれる機能です。テーブルに10個の新規データが入っていたら、次にデータを入力する際に自動的に11番を割り振ってくれます。

オートインクリメントの値はセットしなおさなければ、どんどん増えていきます。テーブルに10個のデータしかないからといって、確実に11番を割り振ってくれるわけではないので注意しましょう。

投稿記事の更新などをすると、リビジョンのデータもDBに格納されます。このデータでも自動採番が使われているので注意。

WordPress データベース構造より

bigint(20) unsigned
※ unsignedは符号なしで使うよという意味。マイナス値が使えない代わりに、倍の範囲を格納できます。

bigint8バイト・・・広範囲整数
※ 符号なしの時の範囲・・・0 ~ 18,446,744,073,709,551,615

phpmyAdminで実際の型を確認してみましたが、同じ種別がセットされていました。

なぜこのような処理が必要になったのか

初稿の投稿記事をExcelにて管理しており、CSVで一括インポートしたかったため、このような処理が必要になりました。。
CSVでの一括記事インポートには、Takuro Hishikawaさんが制作した「Really Simple CSV Importer」を使っております。

Really Simple CSV Importer

SQLでオートインクリメントの値を取得するには?

SQLでオートインクリメントの値を取得するには、下記SQLをなげてAuto_incrementをチェックすればOK。

実際のSQL

SHOW TABLE STATUS LIKE ‘*****posts’;

※ *****部分には、自分のサーバで設定しているテーブル名を入れてください。

function.phpにDBへの処理を記載する

function.phpの最下部に下記処理を記載しましょう。FTPやツールを使わないなら、「外観>テーマエディタ>function.php」で編集可能。

実際に使用したコードは下記。foreachで回しているが、1行目の値しか使わないためbreak
他に良い方法があるかもしれない。お作法がよくわかってないので、あくまで参考としてください。

function get_auto_increment() {
   global $wpdb; //データベースを触るためのおまじない
   $get_data = $wpdb->get_results(“SHOW TABLE STATUS LIKE ‘*****posts’;”);

   $auto_increment = “”;
   foreach ( $get_data as $data ) {
      $auto_increment = $data->Auto_increment;
      break;
   }
   return $auto_increment;
}
add_shortcode(‘get_auto’, ‘get_auto_increment’);

これで投稿記事などでショートコード[get_auto]と記載すれば、次に使われるオートインクリメントの値を取得することができます。

注意したいのが、「Really Simple CSV Importer」などでCSVインポートする場合、その処理でもカウントを1使用する。

[get_auto]出た値+1の数値から、CSVのIDとして追加するとベスト。
※ [get_auto]が30なら、CSVのIDは31からスタートさせる。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です