Ruby on Rails-Integration mit WordPress

Lesezeit: 7 Minuten

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):

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

  • Wow, hast du irgendwo eine ausführliche Anleitung dazu. Vielen Dank.

    – mystischer Ghul

    2. August 2018 um 8:10 Uhr

Das Museum of Modern Art hatte ein WordPress-JSON-API-Plugin, das genau für diesen Zweck entwickelt wurde: https://github.com/dphiffer/wp-json-api

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.

Benutzeravatar von nana
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.

1404380cookie-checkRuby on Rails-Integration mit WordPress

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy