web-dev-qa-db-ja.com

Ruby on Rails Integration With Wordpress

コンテンツを更新するための非常にユーザーフレンドリーな方法でWebサイトを構築するように要求したクライアントがいます。彼らはワードプレスに精通していることを表明し、wordpressフロントエンドを使用してコンテンツを更新できることに関心を示しています。

私はもともと、投稿を作成したり、他の種類のコンテンツを追加したりできる簡単な管理ページを作成するつもりでしたが、wordpressにはほとんどの機能がすでに備わっているようです。

主な問題は、私がRoR開発者であるということです。私は自分が行うすべてのことにhamlを使用することを好み、サイトの動作を100%完全に制御できます。

だから私は誰かがRailsとhamlを使ってサイトを構築する方法のアイデアを持っているが、それでも私のクライアントがワードプレスを使って更新できるようにする方法のアイデアを持っていることを望んでいた。 wordpress api、そしてコンテンツをプルして好きなように表示しますか?または別のCMSを使用する必要があります.. Refinery

正直なところ、私は本当にPHPに触れる必要はなく、できればhtmlではなくhamlを使用する必要があります。 O_o

18
BananaNeil

古い答えはもう関係ありません。 WordPressは、ここからアクセスできるRest APIを提供するようになりました: https://developer.wordpress.org/rest-api/

1)Railsアプリにすべてのルーティングを(記事から「スラッグ」を取得して)統合して、記事を正しく提供し、素敵な「ショー」ビューを表示することをお勧めします。

2)Railsシステム(ルーティングや速度の向上など)にデータを保存する場合は、wp_articlesというデータベーステーブルを作成し、記事リスト全体を読むか、関連する記事を更新します。次に、通常のコードと同様にそれらを提示します。

私はメンテナンスされていないMOMAgem(もう必要ない、メンテナンスされていない)を見て、直接データベースアクセス(多大な労力、遅い、時代遅れ)で上記の答えをチェックし、ここで非常に複雑な直接javascriptベースのソリューションについて読みました(- http://marydickson.com/how-to-use-the-wordpress-rest-api-in-Rails/ )ですが、関連する情報をシステムにコピーして、それらを提示するだけだと思います。通常のMVCプロセスが最も簡単な方法です。

短所:いくつかの追加のWPプラグインは、より多くのデータベースフィールドやその他の情報を提供し、APIを介してそれらに常にアクセスできるかどうかが明確ではありません。そのため、機能が少し制限されている可能性があります。

4
Michael Schmitz

これは私にとってはうまくいっているようです(私はWordpressからセカンダリデータベースとしてロードしているので、establish_connection()を呼び出し、table_nameをオーバーライドします。これでほとんどのそこに行くと、ActiveRecordオブジェクトとしてWordpressデータにアクセスできます。投稿をもう少しユーザーフレンドリーにするためのラッパー(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です(ActiveRecordの事故を避けるために、dbユーザーがwordpress dbへの読み取り専用アクセス権を持っていることを確認してください):

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
21
Ari Gesher

近代美術館にはWordPressこの正確な目的のために構築されたJSONAPIプラグインがありました: https://github.com/dphiffer/wp-json-api

これにより、WordPress主導のバックエンドレイヤーを維持しながら、RoRベースのフロントエンドレイヤーを構築することができました。

10
Kevin C.

Wordpressをインストールしてから、wordpressデータベースをModelsとして再現し、wordpress use次に、Railsフロントエンドに入力されたwordpressを使用して、データにアクセスできるようになります。私は過去にこのようなことをしましたが、永続的なソリューションですが、別のソリューションに移行するためのデータソースとして使用できます。可能性はありますが、ニースではありませんが、機能します。

しかし、1つの質問:なぜあなたはwordpressを十分に強力ではないものに使用しているのですか?!それは挑戦的なタスクのためのフレームワークではありません。それが貸衣装業者のニーズに合わない場合、それは単に使用するのが正しいことです。Railsを使用して、ワードプレスをいじって、同様のGUIを構築することもできます。

2
davidb

HAMLに関しては、ビューをhamlで記述してから、コマンドラインでhaml input.haml output.htmlを使用できます。少し退屈ですが、htmlを書く必要はありません。

1
ksol