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