1. Herzlich willkommen bei WPDE.org, dem grössten und ältesten deutschsprachigen Community-Forum rund um das Thema WordPress. Du musst angemeldet oder registriert sein, um Beiträge verfassen zu können.
    Information ausblenden

Daten auf mehreren Seiten eines Servers konstant halten - Sync

Dieses Thema im Forum "Plugins und Widgets" wurde erstellt von Gast 61846, 12. August 2019.

  1. Gast 61846

    Gast 61846 Gast

    hallo Community,

    hier geht es um die Frage, wie man Daten auf mehreren Seiten syncen kann?

    Also konkret, wie man bei einem Einsatz von mehreren Seiten (also 2 bis 3) die eine Datensatz aus entweder WP-Job-Manager oder Paticipants-DB [vgl. unten auch die Links]) zur Anzeige bringen sollen, wie man diese Seiten am besten so miteinander verbindet, dass ein Dropdown-Menu es dann erlaubt, die Daten aus versch. sites einer WordPress-multisite auszuwählen und zur Anzeige zu biringen.

    die hierbei eingesetzten Module:
    (bin noch nicht 100% sicher welches der beiden ich nehmen werde)

    a. wp-job-Manager:

    vgl.: https://wordpress.org/support/plugin/wp-job-manager/

    b. Participants-Database:
    vgl. https://wordpress.org/plugins/participants-database/
    auch - https://xnau.com/populate-a-form-dropdown-from-the-database/


    Szenario: wenn auf einer site ich aus einem Dropdown-menu auswähle und damit die Abfrage einer anderen subsites job-listings erhalte. Zentral bei diesem Ansatz ist es, eine zentrale db zu haben in der alle jobs gespeichert sind

    ich hätte dann insges. - sagen wir drei sites:

    jobs_1.mysite.com
    jobs_2.mysite.com
    jobs_3.mysite.com


    ist dies denn vorstellbar und umsetzbar - unter Zuhilfenahme der Multisite-Funktion mit dem Bau von den o.g. Subsites – Zentral hierbei die Frage: komme ich klar mit einer Datenbank bzw. einer Zentralen Datenbank für die WP-Job-Manager-Anwendung.

    nebenbei bemerkt: Hier die Bauanleitung einer WordPress Multisite?


    zurück zu dem Ansatz mehrere Seiten db-mässig "miteinander korrespondieren zu lassen"

    Es ist zunächst wichtig, diese Korrespondenz bzw. den Zugriff auf die Zentrale DB seitenübergreifend herzustellen. Das ist etwas tricky aber ansonsten sicher machbar. Hier gibt es mehrere Dinge die wichtig sind - zu beachten sind.. Wenn die mehrere Seiten auf mehreren Severn gehostet sind - wird es schwierig - man müsste das z.B. dann mit Spezialloesungen wie REST API angehen. Das gute aber in meinem Fall: die Seiten sind auf einem Server gehostet. Mit einem Skript und unter Zuhilfenahme von wpdb sollte es möglich sein, auf eine separate bzw. spezielle Datenbank zu loggen und die Daten von ihr zu beziehen.


    Syncen der DBs
    Eine weitere Möglichkeit ist es eine Sync-Funktion zwischen den (sagen wir zwei ) Datenbanken herzustellen, damit die Datenbanken von den mehreren Installationen dieselben Daten haben - für die Ausgaben. Dieser Sync-Ansatz ist eine Möglichkeit, vor allen Dingen wenn die Seiten auf einem Account u. auf einem Server gehostet werden.

    Drop-Down:
    eine weitere technische Herausforderung ist die Frage, wie man die Daten dann in das dropdown-Menü bekommt. Doch dies sollte nicht extrem aufwändig sein. Roland, der Entwickler der PD-DB der Participants-DB dazu (vgl. unten mehr)

    Worum es geht: die zentrale Frage:; also lautet: für wie komplziert bzw. wie einfach haltet ihr die Überlegung zu dem Thema Daten auf mehreren Seiten syncen?

    Freue mich. von Euch zu hoeren.
    Lin, :)


    Anhang:

    Roland, der Entwickler der PD-DB der Participants-DB zum Thema Drop-Down und die Darstellung bei Sync-Inha:
    vgl. auch: https://xnau.com/populate-a-form-dropdown-from-the-database/

     
  2. Gast 61846

    Gast 61846 Gast

    by the way. hab noch ein paar Plugins gefunden die hier ggf. in Frage kommen könnten.


    database-sync
    https://wordpress.org/plugins/database-sync/

    backwpup
    https://wordpress.org/plugins/backwpup/


    wpsynchro

    https://wordpress.org/plugins/wpsynchro/


    VG Lin:)
     
  3. danielgoehr

    danielgoehr Well-Known Member

    Registriert seit:
    13. Juli 2016
    Beiträge:
    2.674
    Zustimmungen:
    128
    Ich weiß, das ist eher eine indirekte Antwort auf deine Frage. Aber warum möchtest du unbedingt Synchronisieren?
    Was spricht denn gegen eine API? Das wäre aus meiner Sicht eigentlich die naheliegendere Lösung...
     
  4. Gast 61846

    Gast 61846 Gast

    Hallo und guten Tag Daniel,


    vorweg vielen Dank für deine Antwort. Meinst du eine Lösung basierend auf REST-API?

    Die REST-API (Representational State Transfer Application Programming Interface) ermöglicht den Austausch von Informationen zwischen verschiedenen Systemen, auch Maschine-Maschine-Kommunikation genannt. Über diese REST-API können wir Aufgaben und Informationen auf verschiedenen Servern verteilen und über einen HTTP-Request anfordern. Dieser HTTP-Request besteht praktisch aus einem sogenannten Endpoint und den dazugehören Parameter - auf die es ankommt.

    Um mal bei dem konkreten Beispiel zu bleiben bzw. das obenstehende aufzugreifen, müsste ich ganz konkret mal ihre Funktionalität genau überlegen. Also, Wie oben bereit beschrieben, soll es eine Möglichkeit geben, dass ich folgendes schaffe:

    Szenario: wenn auf einer site ich aus einem Dropdown-menu auswähle und damit die Abfrage einer anderen subsites job-listings erhalte. Zentral bei diesem Ansatz ist es, eine zentrale db zu haben in der alle jobs gespeichert sind. ich hätte dann insges. - sagen wir drei sites:
    jobs_1.mysite.com
    jobs_2.mysite.com
    jobs_3.mysite.com


    ich müsste dann mir das alles mal genauer angucken: https://developer.wordpress.org/rest-api/

    hier hab ich ein Beispiel gefunden: Sync 2 WordPress websites using REST API custom endpoints
    vgl. mehr hier https://mircian.com/2017/09/18/sync-2-wordpress-rest-api-custom-endpoints/

    mehr generell zum Thema API

    - https://codex.wordpress.org/Database_API
    - https://codex.wordpress.org/WordPress_APIs
     
  5. danielgoehr

    danielgoehr Well-Known Member

    Registriert seit:
    13. Juli 2016
    Beiträge:
    2.674
    Zustimmungen:
    128
    Genau. Wenn die Daten über die Rest-API abrufbar sind, würde ich die REST-API verweden. Ansonten halt selbst eine schreiben für die benötigten Daten.

    Ich würde allerdings generel nicht synchen. Auch nicht über die API. Ich würde die Daten aus einer zentralen Datenbank holen und auf den anderen Seiten nur anzeigen.
     
    Gast 61846 gefällt das.
  6. Gast 61846

    Gast 61846 Gast

    hallo und guten Abend,

    Danke für dein Feedback und deine Einschätzung.

    Mir Rest-API hab ich noch nicht so viel Erfahrung. Allerdings hab ich - angeregt durch Roland, den Entwickler der Participants-DB einen sehr interessanten Ansatz kennengelernt.

    hier vorweg Rest API Ansätze im Kontext des WP-Job-Managers: https://wpjobmanager.com/2019/05/29/wp-job-manager-1-33-0-beta-1/ beim Release der WP Job Manager 1.33.0
    ... mehr auch hier https://github.com/Automattic/WP-Job-Manager/projects/6

    .....zurück zu Roland der Entwickler der Participants DB und seinen Hinweisen: https://wordpress.org/support/topic/how-to-use-participants-db-on-multisite-pulling-from-different-subsites/
    ....

    ich hänge den ganzen Thread an auf den Roland anspielt - mit allen Antworten und auch mit den wichtigsten Kommentaren: Using wpdb to connect to a separate database (https://wordpress.stackexchange.com/questions/1604/using-wpdb-to-connect-to-a-separate-database )

    question: I want to connect wpdb to another database. How do I create the instance and pass it the database name/username/password?

    Answer1: 134 votes Yes it's possible. The wpdb object can be used to access any database and query any table. Absolutely no need to be Wordpress related, which is very interesting. The benefit is the ability to use all the wpdb classes and functions like get_results, etc so that there's no need to re-invent the wheel. Here's how:

    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    comment 1: you can also save time by using global $wpdb. But before firing $wpdb->get_results method,
    you must include wp-load.php as:
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    comment 2: Set WPDB prefix to make WP_Query and get_post to generate correct sql query by calling $mydb->set_prefix('wp_');

    answer2: [ 30 votes ] Connecting to a second database is easy in WordPress, you simply create a new instance of the WPDB class and use it the same way you would use the standard $wpdb instance we all know and love.
    Assuming the second database has the same login information as the main WP one you can even use the predefined constants
    from wp-config.php to avoid hardcoding the login information.
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    comment 1: This is somewhat redundant to Wadih's answer but I think my code example is a bit clearer and its also important to remember the db login constant's as they are almost always the right ones to use and otherwise you risk issues when moving from dev->stage->live environments where the login details might change. – jerclarke Sep 11 '10 at 20:55
    comment 2: Set WPDB prefix to make WP_Query and get_post to generate correct sql query by calling
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    answer3: [ 21 votes ] no one has said this so I thought I'd add an even easier way..
    as long as your additional database has the same user/pass details to access it as your wordpress database you can use the database name before the table name like this
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    comment 1: From my experience, this only works to get data, i.e. using SELECT. You can't insert data.
    comment 2: it will not work externally,

    answer4: [ 7 votes ] I can't comment yet, but I wanted to expand on Wadih M.'s answer (which is great). WP's database class is a customized version of Justin Vincent's ezSQL. If you like the interface and you're wanting to do a site that's not WordPress-based, you might want to check it out: http://justinvincent.com/ezsql

    answer5: [ 6 votes ] While these will work, you'll lose the ability to use the "other" custom features such as get_post_custom and wordpress queries. The simple solution is
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    which changes the database system-wide (a mysql select_db). The database.table method works if you just want to make a simple query, but if you want to access another wordpress blog you can use select. You'll just need to change it back when you're done or your blog may do strange things.
    comment: I'm using this solution and it works great, except for one thing. For some unknown reason wp_get_post_terms() doesn't seem to use the newly selected DB?? Every other function I've tried (like
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    seems to work just fine but ;[/CODE]wp_get_post_terms() ;[/CODE]seems to work towards the ;
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    . Any ideas?

    I was struggling with ;
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    to connect to a second blog database from a parent site that needs to update two blogs. I used ;
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    to select the second database, but I was still getting results from the first database.

    comment: I resolved the problem by calling wp_cache_flush() to clear the WordPress cache before calling WP functions on the second database.


    Zwischenfazit: ich finde dass dies sehr sehr gute Nachrichten sind - und dass ich auf diesem Wege mal gucken kann, wie weit ich mit diesem Ansatz kommen. Besonders in meinem Falle ist dies interessant - denn es sind die in Frage kommenden Seiten alle auf einem Server - weshalb ich schonmal die Grundvoraussetzung für diesen Ansatz erfülle.

    Gute Nachrichten also, ich arbeite mich mal ein.

    Gruß Lin


    Darüber hinaus hier mal noch ein paar weitere Infos - hier noch zum Rest API-Thema:
    hier nochmals Rest API Ansätze im Kontext des WP-Job-Managers: https://wpjobmanager.com/2019/05/29/wp-job-manager-1-33-0-beta-1/ WP Job Manager 1.33.0
    noch mehr Links:
    https://github.com/Automattic/WP-Job-Manager/projects/6
    https://wordpress.org/plugins/wpsynchro/
     
  7. Gast 61846

    Gast 61846 Gast

    hallo und guten Abend,

    wenn wir auf einem Server sind - dann ist es im Grunde leicht moeglich, auf die diversen Datenbanken zuzugreifen: Wir bräuchten eine API wenn die Seiten auf veschiedenen Server wären - aber durch den Umstand, dass alles auf einem Server liegt, wire es einfacher. Man kann im Grunde zu jeder DB von jeder Seite aus verbinden. In PHP gibt es keine Regel, die etwa die Anzahl

    - der DB-Objekte auf nur eines begrenzen würde; oder
    - die Anzahl der Anzahl der DB-Verbindungen auf nur eine DB beschränken würde;

    Man kann mehrere (multiple) DB-Objekte haben. Das Gerüst zur Speicherung und Abfrage von Daten der Datenbank ist also im Grunde in diesem Falle sehr robust - vieles ist möglich. Wenn die Seiten auf verschiedenen Servern liegen, dann muss man zwei Verbindungen zu diesen Datenbanken herstellen. Beim Herstellen einer Verbindung zu einem Server, ist eine DB die Default-DB

    Wenn man - jetzt mal angenommen - zwei Datenbanken hat - etwa so http://www.mediafire.com/view/x7qbjp2k1g38bvg/__database__1_.png/file
    [​IMG]
    Anm: der Image-Uploade in diesem Forum funktioniert leider nicht - ist ein kl. Mysterium

    ...dann ist das wie folgt: Beim Herstellen einer Verbindung spezifiziert man - zum Beispiel DB1

    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Wenn man jetzt eine Abfage auf tableA laufen lässt, dann wird dies so aufgebaut.

    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Das funktioniert weil TableA in der DB1, also der Basis-DB ist. Wenn man dahingegen etwa eine (Ab-)Frage an TableB, dann muss man lediglich dafür sorgen, dass im Statement festgelegt ist, dass TableB in der DB2 ist.

    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Man kann sogar einen Mix in ein und derselben Abfrage herstellen
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Also wenn man mehrere Datenbanken erreichen will, die auf einem Server sich befinden, dann muss man lediglich bei der Abfrage darauf achten, dass man in der Abfrage die Table-prefixs mit denen der Datenbank-Präfixe verbindet.

    Und jetzt noch etwas zu dem Wp-Stackexchange-Beitrag, den ich gestern - weiter oben erwähnt habe: Während die oben erwähnten Dinge allgemeingültig sind gilt für das
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    , dass dies die DB-Arbeit u. Abfragen in der Wordpressumgebung erleichtert. vgl. insgesamt hier: https://wordpress.stackexchange.com/questions/1604/using-wpdb-to-connect-to-a-separate-database

    und hier das Zitat:
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    konkret:
    ...Der große Vorteil des wpdb object ist es, dass diese Klassen die Abfragen innerhalb einer Wordpress erleichtern.

    vg lin ;)

    ps. Anm: der Image-Uploade in diesem Forum funktioniert leider nicht - ist ein kl. Mysterium
     
    #7 Gast 61846, 14. August 2019
    Zuletzt von einem Moderator bearbeitet: 14. August 2019
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden