prosource

Ruby on Rails와 Wordpress 통합

probook 2023. 2. 8. 18:04
반응형

Ruby on Rails와 Wordpress 통합

콘텐츠를 업데이트 할 수 있는 매우 사용하기 쉬운 웹 사이트를 구축해 달라고 의뢰한 고객이 있습니다.그들은 워드프레스에 익숙함을 표현했고, 워드프레스 프론트엔드를 사용하여 콘텐츠를 업데이트할 수 있는 것에 관심을 보였다.

원래는 간단한 관리 페이지를 작성하여 게시물을 작성하거나 다른 종류의 콘텐츠를 추가할 수 있도록 하려고 했습니다.워드프레스는 대부분의 기능을 이미 갖추고 있는 것 같습니다.

가장 큰 문제는 제가 RoR 개발자라는 것입니다.나는 내가 하는 모든 일에 햄을 사용하는 것을 선호하며, 사이트의 작동 방식을 100% 완전히 통제한다.

그래서 저는 누군가가 제가 레일과 햄을 사용하여 사이트를 만들면서도 제 의뢰인이 워드프레스를 사용하여 업데이트 할 수 있는 방법을 알고 있기를 희망했습니다.wordpress api에 접속해서 콘텐츠를 원하는 방식으로 표시할 수 있지 않을까 생각했습니다.아니면 정유시설 같은 다른 CMS로 가야 할까?

솔직히 저는 PHP를 만지고 싶지 않고 html보다는 haml을 사용하는 것이 더 좋습니다.O_O

가 있는 것 에 Wordpress의 secondary 데이터베이스로 로드하고 있습니다따라서establish_connection() 및 " " " "table_name워드프레스 ActiveRecord를 사용합니다.Posts)에을 써놓지 WPPostAPI의 관점에서 좀 더 사용하기 쉽게 하기 위해서입니다만, 이것은 Wordpress 데이터의 Rails 베이스의 표시에 적합합니다.

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

그런 다음 데이터에 쉽게 접근할 수 있는 단순한 루비 오브젝트로 카테고리를 정리합니다.

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

다음은 my database.yml입니다(Active Record 오류를 피하기 위해 db 사용자가 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

Museum of Modern Art에서는 WordPress JSON API 플러그인이 다음과 같은 목적을 위해 구축되었습니다.https://github.com/dphiffer/wp-json-api

이를 통해 WordPress 기반 백엔드 계층을 유지하면서 RoR 기반 프런트 엔드 계층을 구축할 수 있었습니다.

오래된 답변은 더 이상 관련이 없습니다.Word Press는 Rest API를 제공하고 있습니다.이 API는 https://developer.wordpress.org/rest-api/에서 액세스 할 수 있습니다.

1) 모든 루팅을 레일 앱에 통합하여(기사에서 "슬래그"를 사용하여) 기사를 올바르게 전달하고 보기 좋게 표시할 수 있습니다.

2) 데이터를 레일 시스템에 저장하고 싶은 경우(예를 들어 라우팅 및 속도 향상을 위해) wp_articles라는 데이터베이스 테이블을 작성하여 기사 목록 전체를 읽거나 관련 기사를 업데이트한 후 일반 코드와 유사한 내용을 제시하면 됩니다.

유지보수가 필요없는 MOMA gem(더 이상 필요없고 유지보수가 필요없음)을 살펴보고 데이터베이스 직접접근으로 위의 답변을 체크했습니다(더 느림, 구식).슬리하고 복잡한 다이렉트 자바스크립트 기반 솔루션(http://marydickson.com/how-to-use-the-wordpress-rest-api-in-rails/), 하지만 단순히 관련 정보를 복사하는 것만으로 충분하다고 생각합니다.시스템에 정보를 입력하고 일반 MVC 프로세스를 제공하는 것이 가장 쉬운 방법입니다.

단점:일부 추가 WP-Plugins는 더 많은 데이터베이스 필드 및 기타 정보를 제공하며 API를 통해 항상 이러한 필드에 액세스할 수 있는지 여부는 명확하지 않습니다.따라서 기능이 약간 제한적일 수 있습니다.

워드프레스를 설치한 후 워드프레스 데이터베이스를 다음과 같이 복제할 수 있습니다.Models 및 워드프레스가 사용하는 것과 같은 연관성을 추가합니다.그러면 워드프레스 프런트엔드에 입력된 레일을 사용하여 데이터에 액세스할 수 있습니다.과거에도 이와 같은 작업을 실시했지만, 항구적인 솔루션이 아니라 다른 솔루션으로 이행하기 위한 데이터 소스로서 실시했습니다.가능해요, 좋진 않지만 효과가 있어요.

하지만 한 가지 질문이 있습니다.왜 힘도 없는 걸 워드프레스로 하는 거야?!CMS는 도전적인 작업을 위한 프레임워크가 아닙니다.고객님의 요구에 맞지 않는 경우 올바른 사용이 아닙니다.레일을 사용하여 워드프레스를 만지작거리면서 유사한 GUI를 구축할 수 있습니다.

HAML에 대해서는 HAML로 뷰를 작성한 후haml input.haml output.html커맨드 라인에 표시됩니다.좀 지루하긴 하지만 굳이 html을 쓸 필요는 없어요.

MAMP를 사용하여 워드프레스를 설치합니다.로컬 호스트에서 페이지를 엽니다.그러면 파이어폭스 도구를 사용하여 HTML 코드를 볼 수 있습니다.

언급URL : https://stackoverflow.com/questions/9277531/ruby-on-rails-integration-with-wordpress

반응형