Ich habe einen Kunden, der mich gebeten hat, ihm eine Website mit einer sehr benutzerfreundlichen Methode zur Aktualisierung von Inhalten zu erstellen. Sie haben ihre Vertrautheit mit WordPress zum Ausdruck gebracht und Interesse daran bekundet, das WordPress-Front-End verwenden zu können, um ihre Inhalte zu aktualisieren.
Ich hatte ursprünglich vor, ihnen eine einfache Admin-Seite zu erstellen, auf der sie Beiträge erstellen oder andere Arten von Inhalten hinzufügen können. Aber es scheint, als hätte WordPress die meisten Funktionen bereits vorhanden.
Das Hauptproblem ist, dass ich ein RoR-Entwickler bin. Ich ziehe es vor, haml für alles zu verwenden, was ich tue, und habe 100% volle Kontrolle darüber, wie die Seite funktioniert.
Also hatte ich gehofft, dass jemand da draußen eine Idee hätte, wie ich die Site immer noch mit Rails und Haml erstellen könnte, aber meinem Client trotzdem erlauben könnte, mit WordPress zu aktualisieren. Ich dachte, ich könnte vielleicht auf die WordPress-API zugreifen und einfach den Inhalt abrufen und so anzeigen, wie ich es möchte? oder vielleicht sollte ich mit einem anderen CMS gehen Raffinerie?
Ehrlich gesagt möchte ich einfach nicht mit PHP in Berührung kommen und lieber haml als html verwenden. O_o
Bitte basteln Sie nicht etwas zusammen, indem Sie versuchen, das zu kombinieren, was Sie möchten wie mit was Ihr Kunde willdie ein armer zukünftiger Betreuer entschlüsseln muss …
– Michael Berkowski
14. Februar 2012 um 13:27 Uhr
Verwenden Sie WordPress. Es macht keinen Sinn, das Rad neu zu erfinden. Die freie Zeit ermöglicht es Ihnen, andere Projekte aufzunehmen, bei denen Sie in Ihrer bevorzugten Umgebung arbeiten KÖNNEN.
– MunkiPhD
14. Februar 2012 um 13:52 Uhr
Du bist ein Hammer, und das ist kein Nagel. Es gibt Zeiten, in denen Sie Kunden sagen müssen: „Ich bin nicht der Richtige für diesen Job“. Sie könnten immer noch am Projekt beteiligt sein, indem Sie ihnen helfen, die Anforderungen für das Projekt zu konkretisieren, und Sie könnten ihnen helfen, einen kompetenten PHP-Typen zu finden. Allerdings lässt mich die Vorstellung, eine schreckliche frankenstinische RoR/Wordpress-Site zusammenzuschustern, schaudern.
– Mark Talbot
14. Februar 2012 um 13:58 Uhr
Dies scheint für mich zu funktionieren (ich lade von WordPress als sekundäre Datenbank, daher die establish_connection() Anrufe und Überschreiben table_name. Dies sollte den größten Teil des Weges dorthin bringen und Ihnen Zugriff auf die WordPress-Daten als ActiveRecord-Objekte geben. Ich habe den Wrapper um Posts noch nicht geschrieben (WPPost), um sie aus API-Sicht etwas benutzerfreundlicher zu machen, aber das sollte gut für die Rails-basierte Anzeige von WordPress-Daten funktionieren.
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
Ich verpacke die Kategorie dann in einem einfachen Ruby-Objekt, das den Zugriff auf die Daten erleichtert:
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
Hier ist meine database.yml (stellen Sie sicher, dass Ihr DB-Benutzer nur Lesezugriff auf die WordPress-DB hat, um ActiveRecord-Pannen zu vermeiden):
Dies ermöglichte es ihnen, eine RoR-basierte Front-End-Schicht aufzubauen und gleichzeitig eine WordPress-gesteuerte Back-End-Schicht beizubehalten.
Die älteren Antworten sind nicht mehr relevant. WordPress bietet jetzt eine Rest-API, auf die hier zugegriffen werden kann: https://developer.wordpress.org/rest-api/
1) Sie werden wahrscheinlich alle Routen (indem Sie den “Slug” aus den Artikeln nehmen) in Ihre Rails-App integrieren wollen, um die Artikel korrekt zu bedienen und sie mit einer schönen “Show” -Ansicht zu präsentieren.
2) Wenn Sie Daten im Schienensystem speichern möchten (z. B. für Routing und Geschwindigkeitserhöhung), können Sie eine Datenbanktabelle namens wp_articles erstellen, einfach die vollständige Artikelliste lesen oder relevante Artikel aktualisieren und sie dann ähnlich wie in Ihrem normalen Code darstellen.
Ich habe mir das nicht gewartete MOMA-Juwel angesehen (nicht mehr benötigt, nicht gewartet), die obige Antwort mit direktem Datenbankzugriff überprüft (großer Aufwand, langsamer, veraltet) und hier über eine etwas komplexe direkte Javascript-basierte Lösung gelesen (http://marydickson.com/how-to-use-the-wordpress-rest-api-in-rails/), aber ich denke, dass es am einfachsten ist, die relevanten Informationen einfach in Ihr System zu kopieren und sie dann mit dem normalen MVC-Prozess zu präsentieren.
Nachteile: Einige zusätzliche WP-Plugins bieten mehr Datenbankfelder und andere Informationen und es ist nicht klar, ob Sie immer über die API darauf zugreifen können. Sie haben also möglicherweise eine leicht eingeschränkte Funktionalität.
Vielen Dank, dass Sie dazu beigetragen haben, diese Frage auf dem neuesten Stand zu halten.
– BananaNeil
6. Juni 2017 um 0:11 Uhr
Ist dieser Ansatz besser als direkt auf die WP-Datenbank zuzugreifen und die Modelle/Controller dafür zu erstellen? Oder ist das nicht mehr möglich?
– Fahmiin
15. September 2020 um 8:45 Uhr
Sie hätten wahrscheinlich eine sauberere Lösung, wenn Sie direkt auf die WP-Datenbank zugreifen, wenn dies das Einzige ist, was Ihre App tut. In meinem Fall wurde es in ein anderes Projekt gemischt und ich wollte die Dinge getrennt halten. Viel Glück.
– Michael Schmitz
16. September 2020 um 11:54 Uhr
Sie könnten WordPress installieren und dann die WordPress-Datenbank als reproduzieren Models und fügen Sie die Assoziationen hinzu, wie WordPress sie verwendet. Dann könnten Sie auf die Daten zugreifen, indem Sie Schienen verwenden, die im WordPress-Frontend eingegeben wurden. Ich habe so etwas in der Vergangenheit gemacht, aber nicht als dauerhafte Lösung, sondern als Datenquelle für die Migration zu einer anderen Lösung. Es ist möglich, es ist nicht schön, aber es funktioniert.
Aber eine Frage: Warum benutzt du WordPress für eine Sache, die nicht mächtig genug ist?! Es ist ein CMS, kein Framework für anspruchsvolle Aufgaben. Wenn es nicht den Bedürfnissen des Kunden entspricht, ist es einfach nicht das Richtige. Sie könnten lieber eine ähnliche GUI mit Rails erstellen, als mit WordPress herumzuspielen.
In Bezug auf HAML können Sie Ihre Ansichten immer noch in Haml schreiben und dann verwenden haml input.haml output.html auf der Kommandozeile. Ein bisschen langweilig, aber Sie müssen kein HTML schreiben.
nana
Verwenden Sie MAMP und installieren Sie WordPress. Öffnen Sie die Seite in Ihrem Localhost. Dann können Sie das Firefox-Tool verwenden, um den HTML-Code anzuzeigen.
14043800cookie-checkRuby on Rails-Integration mit WordPressyes
Bitte basteln Sie nicht etwas zusammen, indem Sie versuchen, das zu kombinieren, was Sie möchten wie mit was Ihr Kunde willdie ein armer zukünftiger Betreuer entschlüsseln muss …
– Michael Berkowski
14. Februar 2012 um 13:27 Uhr
Verwenden Sie WordPress. Es macht keinen Sinn, das Rad neu zu erfinden. Die freie Zeit ermöglicht es Ihnen, andere Projekte aufzunehmen, bei denen Sie in Ihrer bevorzugten Umgebung arbeiten KÖNNEN.
– MunkiPhD
14. Februar 2012 um 13:52 Uhr
Du bist ein Hammer, und das ist kein Nagel. Es gibt Zeiten, in denen Sie Kunden sagen müssen: „Ich bin nicht der Richtige für diesen Job“. Sie könnten immer noch am Projekt beteiligt sein, indem Sie ihnen helfen, die Anforderungen für das Projekt zu konkretisieren, und Sie könnten ihnen helfen, einen kompetenten PHP-Typen zu finden. Allerdings lässt mich die Vorstellung, eine schreckliche frankenstinische RoR/Wordpress-Site zusammenzuschustern, schaudern.
– Mark Talbot
14. Februar 2012 um 13:58 Uhr