WordPressのデータをActiveRecordでいじる

the_titleとかget_the_titleとかWordPressのネーミングセンスにつきあってると頭がおかしくなって死ぬ。
万事そんなかんじなので、可能であればなるべくおつきあいを遠慮したい。

WordPressのDBはMySQLなのでテーブルの構成さえ分かればActiveRecordなりSQLなりでデータを直接いじれる。
ということでバッチ処理等、フロントエンドに関係なくDBにだけタッチすればよい場合はWordPressとは独立したプログラムを書いて対応することができる。

ただしデータを直接いじる場合は、WordPressのフィルタ機構が働かない点に注意。
投稿の更新の際にフィルタをかけるプラグインなどを利用している場合は、データに不整合が出てしまう可能性もある。

WordPressのテーブル構造

Database Description « WordPress Codex

バージョンアップでテーブル構造が変わってしまうリスクもあるかもしれない。
とはいえそれほど大きな変更はメジャーバージョンの変わり目など極まれにしか行われない印象だが。

サンプルコード

細かい説明は略。

#!/usr/local/bin/ruby
# _*_ encoding: utf-8 _*_

require "rubygems"
require "active_record"

ActiveRecord::Base.establish_connection(
  :adapter => 'mysql',
  :database => 'hoge_production',
  :username => 'hoge_user',
  :password => 'hogehogehoge',
  :host => 'localhost'
)

class Post < ActiveRecord::Base
  set_table_name "wp_posts"
end

class PostMeta < ActiveRecord::Base
  set_table_name "wp_postmeta"
  set_primary_key "meta_id"
end

post = Post.first
meta = PostMeta.find_by_post_id_and_meta_key(post.id, 'some_meta_key')
if meta
  meta.update_attributes(:meta_value => 'some_value')
else
  WPPostMeta.create({:post_id => post.id, :meta_key => 'some_meta_key', :meta_value => 'some_value'})
end

前の記事

Rails3でパンくずリスト