我有一个客户要求我为他们建立一个网站,以一种非常用户友好的方式来更新内容。他们表示熟悉 wordpress,并表示有兴趣能够使用 wordpress 前端来更新他们的内容。
我原本打算为他们构建一个简单的管理页面,他们可以在其中创建帖子或添加其他类型的内容..但似乎 wordpress 已经具备了大部分功能。
主要问题是我是 RoR 开发人员。我更喜欢将 haml 用于我所做的每一件事,并且可以 100% 完全控制网站的工作方式。
所以我希望外面有人会想到一种方法,我仍然可以使用 rails 和 haml 构建站点,但仍然允许我的客户使用 wordpress 进行更新。我想也许我可以访问 wordpress api,然后只提取内容并按我想要的方式显示它?或者也许我应该使用另一个 CMS.. 比如 Refinery ?
老实说,我真的不想接触 PHP,最好使用 haml,而不是 html。 O_o
最佳答案
这似乎对我有用(我从 Wordpress 加载作为辅助数据库,因此 establish_connection()
调用并覆盖 table_name
。这应该得到大部分那里的方式,使您可以访问作为 ActiveRecord 对象的 Wordpress 数据。我还没有编写 Posts (WPPost
) 的包装器,以使它们从 API 的角度更加用户友好,但是这个应该适用于基于 Rails 的 Wordpress 数据显示。
class Term < ActiveRecord::Base
establish_connection "wordpress-#{Rails.env}"
self.table_name = "wp_terms"
has_one :term_taxonomy
end
class TermTaxonomy < ActiveRecord::Base
establish_connection "wordpress-#{Rails.env}"
self.table_name = "wp_term_taxonomy"
belongs_to :term
has_many :term_relationship
end
class TermRelationship < ActiveRecord::Base
establish_connection "wordpress-#{Rails.env}"
self.table_name = "wp_term_relationships"
belongs_to :post, :foreign_key => "object_id"
belongs_to :term_taxonomy
has_one :term, :through => :term_taxonomy
end
class Post < ActiveRecord::Base
establish_connection "wordpress-#{Rails.env}"
self.table_name = "wp_posts"
has_many :term, :through => :term_relationship
has_many :term_relationship, :foreign_key => "object_id"
has_one :postmeta
# we only care about published posts for notifications
default_scope where("post_type = 'post' and post_status = 'publish'")
end
class Postmeta < ActiveRecord::Base
establish_connection "wordpress-#{Rails.env}"
self.table_name = "wp_postmeta"
belongs_to :post
end
然后,我将类别封装在一个简单的 ruby 对象中,以便轻松访问数据:
class WPCategory
attr_accessor :id
attr_accessor :name
attr_accessor :description
attr_accessor :term
def self.categories()
categories = Term.all()
categories = categories.select{|term| term.term_taxonomy.taxonomy == "category"}
return categories.map{|term| WPCategory.new(term)}
end
def self.category(id=nil)
if id
term = Term.find(id)
if term.term_taxonomy.taxonomy == "category"
return WPCategory.new(term)
end
end
return nil
end
def initialize(term)
@id = term.term_id
@name = term.name
@description = term.term_taxonomy.description
@term = term
end
def to_s
return "Wordpress Category: '#{@name}' (id=#{@id})"
end
end
这是我的 database.yml(确保您的 db 用户对 wordpress db 具有只读访问权限以避免任何 ActiveRecord 事故):
test:
adapter: mysql2
encoding: utf8
database: test-rails
pool: 5
username: test
password: XXXXXX
socket: /var/lib/mysql/mysql.sock
wordpress-test:
adapter: mysql2
encoding: utf8
database: test-wordpress
pool: 5
username: test
password: XXXXXXX
socket: /var/lib/mysql/mysql.sock
wordpress-development:
adapter: mysql2
encoding: utf8
database: wordpress
pool: 5
username: dev
password: XXXXXX
socket: /var/lib/mysql/mysql.sock
development:
adapter: mysql2
encoding: utf8
database: dev
pool: 5
username: dev
password: XXXXXX
socket: /var/lib/mysql/mysql.sock
关于php - Ruby on Rails 与 Wordpress 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9277531/