Ruby on Rails와 Wordpress 통합
콘텐츠를 업데이트 할 수 있는 매우 사용하기 쉬운 웹 사이트를 구축해 달라고 의뢰한 고객이 있습니다.그들은 워드프레스에 익숙함을 표현했고, 워드프레스 프론트엔드를 사용하여 콘텐츠를 업데이트할 수 있는 것에 관심을 보였다.
원래는 간단한 관리 페이지를 작성하여 게시물을 작성하거나 다른 종류의 콘텐츠를 추가할 수 있도록 하려고 했습니다.워드프레스는 대부분의 기능을 이미 갖추고 있는 것 같습니다.
가장 큰 문제는 제가 RoR 개발자라는 것입니다.나는 내가 하는 모든 일에 햄을 사용하는 것을 선호하며, 사이트의 작동 방식을 100% 완전히 통제한다.
그래서 저는 누군가가 제가 레일과 햄을 사용하여 사이트를 만들면서도 제 의뢰인이 워드프레스를 사용하여 업데이트 할 수 있는 방법을 알고 있기를 희망했습니다.wordpress api에 접속해서 콘텐츠를 원하는 방식으로 표시할 수 있지 않을까 생각했습니다.아니면 정유시설 같은 다른 CMS로 가야 할까?
솔직히 저는 PHP를 만지고 싶지 않고 html보다는 haml을 사용하는 것이 더 좋습니다.O_O
가 있는 것 에 Wordpress의 secondary 데이터베이스로 로드하고 있습니다따라서establish_connection()
및 " " " "table_name
워드프레스 ActiveRecord를 사용합니다.Posts)에을 써놓지 WPPost
API의 관점에서 좀 더 사용하기 쉽게 하기 위해서입니다만, 이것은 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를 통해 항상 이러한 필드에 액세스할 수 있는지 여부는 명확하지 않습니다.따라서 기능이 약간 제한적일 수 있습니다.
워드프레스를 설치한 후 워드프레스 데이터베이스를 다음과 같이 복제할 수 있습니다.Model
s 및 워드프레스가 사용하는 것과 같은 연관성을 추가합니다.그러면 워드프레스 프런트엔드에 입력된 레일을 사용하여 데이터에 액세스할 수 있습니다.과거에도 이와 같은 작업을 실시했지만, 항구적인 솔루션이 아니라 다른 솔루션으로 이행하기 위한 데이터 소스로서 실시했습니다.가능해요, 좋진 않지만 효과가 있어요.
하지만 한 가지 질문이 있습니다.왜 힘도 없는 걸 워드프레스로 하는 거야?!CMS는 도전적인 작업을 위한 프레임워크가 아닙니다.고객님의 요구에 맞지 않는 경우 올바른 사용이 아닙니다.레일을 사용하여 워드프레스를 만지작거리면서 유사한 GUI를 구축할 수 있습니다.
HAML에 대해서는 HAML로 뷰를 작성한 후haml input.haml output.html
커맨드 라인에 표시됩니다.좀 지루하긴 하지만 굳이 html을 쓸 필요는 없어요.
MAMP를 사용하여 워드프레스를 설치합니다.로컬 호스트에서 페이지를 엽니다.그러면 파이어폭스 도구를 사용하여 HTML 코드를 볼 수 있습니다.
언급URL : https://stackoverflow.com/questions/9277531/ruby-on-rails-integration-with-wordpress
'prosource' 카테고리의 다른 글
프런트 엔드의 OAuth를 사용한 인증에 성공한 후 백엔드와 대화하는 방법 (0) | 2023.02.08 |
---|---|
SQL을 통해 Wordpress 비밀번호를 재설정하시겠습니까? (0) | 2023.02.08 |
각도, 컨텐츠 유형이 $http와 함께 전송되지 않습니다. (0) | 2023.02.08 |
워드프레스 add_meta_box() 이상함 (0) | 2023.02.08 |
wordpress 플러그인 -> 정의되지 않은 함수 wp_get_current_user() 호출 (0) | 2023.02.08 |