簡體   English   中英

Ruby on Rails與Wordpress集成

[英]Ruby on Rails Integration With Wordpress

我有一個客戶要求我建立一個網站,用一種非常用戶友好的方式來更新內容。 他們表達了對wordpress的熟悉,並表示有興趣能夠使用wordpress前端更新其內容。

我原本打算建立一個簡單的管理頁面,他們可以創建帖子,或添加其他類型的內容..但似乎wordpress已經有大部分功能。

主要問題是我是一名RoR開發人員。 我喜歡在我做的每件事情上使用haml,並且100%完全控制網站的工作方式。

所以我希望那里有人會想到我仍然可以使用rails和haml構建網站,但仍允許我的客戶端使用wordpress進行更新。 我想也許我可以訪問wordpress api,只是拉出內容並按照我想要的方式顯示它? 或者我應該去另一個CMS ..像Refinery

老實說,我真的不想觸摸PHP,最好使用haml而不是html。 O_O

這似乎對我有用(我從Wordpress加載為輔助數據庫,因此table_name establish_connection()調用並覆蓋table_name 。這應該大部分都在那里,讓你可以訪問WordPress數據作為ActiveRecord對象。我沒有還沒有編寫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

現代藝術博物館有一個WordPress JSON API插件,專為此目的而構建: https//github.com/dphiffer/wp-json-api

這使他們能夠構建基於RoR的前端層,同時保持WordPress驅動的后端層。

較舊的答案不再相關。 WordPress現在提供了一個Rest API,可以在這里訪問: https//developer.wordpress.org/rest-api/

1)您可能希望在rails應用程序中集成所有路由(通過從文章中獲取“slug”)來正確地提供文章並為它們提供一個漂亮的“show”視圖。

2)如果你想在rails系統中存儲數據(例如用於路由和提高速度),你可以創建一個名為wp_articles的數據庫表,只需閱讀完整的文章列表或更新相關文章,然后將它們呈現為與普通代碼類似。

我已經看過非維護的MOMA gem(不再需要,不需要維護),通過直接數據庫訪問(巨大的努力,更慢,過時)檢查上面的答案,並在這里閱讀一個簡單的復雜的直接基於JavaScript的解決方案( http: @marydickson.com/how-to-use-the-wordpress-rest-api-in-rails/ ),但我認為只需將相關信息復制到您的系統中然后使用正常的MVC流程呈現它們就是最簡單的辦法。

缺點:一些額外的WP插件提供了更多的數據庫字段和其他信息,並且不清楚是否可以通過API訪問這些字段。 所以你的功能可能略有限制。

您可以安裝Wordpress然后將wordpress數據庫重新生成為Model s並添加像wordpress這樣的關聯使用它們。 然后,您將能夠使用在wordpress前端輸入的rails來訪問數據。 我過去做過類似的事情,但不是永久解決方案,而是作為遷移到另一個解決方案的數據源。 它可能,它不好但它的工作原理。

但有一個問題:為什么你使用wordpress來做一件不夠強大的東西?! 它不是一個用於挑戰任務的框架。 如果它不符合客戶的需求,那么它根本就不適合使用。 您可以使用rails構建類似的GUI,然后擺弄wordpress。

關於HAML,您仍然可以用haml input.haml output.html編寫視圖,然后在命令行中使用haml input.haml output.html 有點無聊,但你不必寫html。

使用MAMP並安裝wordpress。 在本地主機中打開頁面。 然后你可以使用firefox工具來查看html代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM