php - Ruby on Rails 与 Wordpress 集成

标签 php ruby-on-rails ruby-on-rails-3 wordpress content-management-system

我有一个客户要求我为他们建立一个网站,以一种非常用户友好的方式来更新内容。他们表示熟悉 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/

相关文章:

ruby-on-rails - 在自定义路线上使用 kaminari 进行分页

ruby - Rails 3 的 RGB 颜色选择器

php - 在 Symfony 1.4 中的每个 Action 后执行代码

javascript - 防止表单在没有ajax的情况下提交后重定向

ruby-on-rails - 当数据库包含 100k 条记录时,rails find_or_create_by 很慢

ruby-on-rails - 所有之前的 Rails rspec 与每个之前的 Rails rspec

PHP 和报价

php - 基于MySQL和PHP的统计

mysql - 轨道 3 : Search in a query result

ruby-on-rails-3 - 使用带有空关联的nested_form gem 时出错