Daten auf mehreren Seiten eines Servers konstant halten - Sync

  • 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?

    Zitat

    Step 1: Install WordPress. If i am building a Multisite network from-scratch, then i need to install WordPress.
    Step 2: Back up the site. …
    Step 3: Deactivate all active plugins. …
    Step 4: Update wp-config.php. …
    Step 5: Install Multisite in WordPress. …
    Step 6: Enable the Network.


    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:

    Zitat

    This is much easier. If this is a Participants Database dropdown, I have published a tutorial that will help you get that done: Populate a Form Dropdown from the Database. If the dropdown is not in Participants Database, you’d need to use whatever methods are available in that context.

    vgl. auch: https://xnau.com/populate-a-form-dropdown-from-the-database/

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • 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/

    Zitat

    Keeping databases in sync between development, staging and live servers can be a pain. This plugin lets you
    link together several WordPress installations by sharing a secret token. Once linked, administrators can pull
    or push the entire database between servers with just a click

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

    Zitat

    The backup plugin BackWPup can be used to save your complete installation including /wp-content/
    and push them to an external Backup Service, like Dropbox, S3, FTP and many more, see list below. With a single backup
    .zip file you are able to easily restore an installation. Please understand: this free version will not be supported
    as good as the BackWPup Pro version. With our premium version you get first class support and more features.


    wpsynchro

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

    Zitat

    Complete migration plugin for WP developers, by WP developers
    Automating the repetitive task of migrating sites, such as keeping a local development site synchronized with a production site or a staging site in sync with a production site. Save time by automating migrations – Setup once, run many times Improve your service and quality to your customer by working on the best possible data on dev/staging environments Simple and convenient maintenance of your environments being super fast and easy to use


    VG Lin:)


  • 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.

    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...

  • 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/syn…stom-endpoints/



    mehr generell zum Thema API

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

  • 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.

  • hallo und guten Abend,

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

    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.

    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-…-1-33-0-beta-1/ beim Release der WP Job Manager 1.33.0

    Zitat

    new features, including the ability to save drafts of job listings on the frontend, access to job listing fields in the REST API, and some minor improvements to the [jobs] shortcode. Please help us test this beta by installing it on your staging site. You can download the beta and see more detailed testing instructions from the GitHub release page.

    ... 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/…erent-subsites/

    Zitat

    ....If they are all on the same server under the same hosting account, that is helpful. In a case like that, you could write your custom code to access the other site’s database directly. This is discussed here, and it’s quite feasible: link: Using wpdb to connect to a separate database

    ....

    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…parate-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
    $mydb = new wpdb('username','password','database','localhost');
    $rows = $mydb->get_results("select Name from my_table");
    echo "<ul>";
    foreach ($rows as $obj) :
       echo "<li>".$obj->Name."</li>";
    endforeach;
    echo "</ul>";

    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
    require_once('/your/wordpress/wp-load.php');


    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
    /**
     * Instantiate the wpdb class to connect to your second database, $database_name
     */
    $second_db = new wpdb(DB_USER, DB_PASSWORD, $database_name, DB_HOST);
    /**
     * Use the new database object just like you would use $wpdb
     */
    $results = $second_db->get_results($your_query);

    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
    $second_db->set_prefix('wp_');

    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
    $query = $wpdb->prepare('SELECT * FROM dbname.dbtable WHERE 1');
    $result = $wpdb->get_results($query);


    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
    $wpdb->select('database_name');;


    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
    get_post_meta(), get_posts() etc);

    seems to work just fine but ;[/CODE]wp_get_post_terms() ;[/CODE]seems to work towards the ;

    Code
    DB_NAME database;

    . Any ideas?

    I was struggling with ;

    Code
    using $wpdb ;

    to connect to a second blog database from a parent site that needs to update two blogs. I used ;

    Code
    $wpdb->select($dbname, $dbh);

    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-…-1-33-0-beta-1/ WP Job Manager 1.33.0

    Zitat

    Our next major version of WP Job Manager is ready for testing. We have fixed some bugs and added some new features, including the ability to save drafts of job listings on the frontend, access to job listing fields in the REST API, and some minor improvements to the [jobs] shortcode. Please help us test this beta by installing it on your staging site. You can download the beta and see more detailed testing instructions from the GitHub release page. To report new issues between this release and the most recent stable version (1.32.3), please file a bug report on GitHub and include a list of your current theme and active plugins. As this is a beta release, please test on a staging site and not your live site. If you don’t have a staging site, you can use the WP Staging plugin to create one.

    noch mehr Links:
    https://github.com/Automattic/WP-Job-Manager/projects/6
    https://wordpress.org/plugins/wpsynchro/

  • 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/x7qbjp2k1…se__1_.png/file
    [Blockierte Grafik: http://www.mediafire.com/view/x7qbjp2k1g38bvg/__database__1_.png/file]
    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
    $conn = mysqli_connect(HOST, USER, PWD, 'DB1');

    Wenn man jetzt eine Abfage auf tableA laufen lässt, dann wird dies so aufgebaut.

    Code
    $sql = "SELECT cola, colb FROM TableA"

    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
    $sql = "SELECT cola, colb FROM DB2.TableB";

    Man kann sogar einen Mix in ein und derselben Abfrage herstellen

    Code
    $sql = "SELECT a.cola
    
    
                 , b.colb
            FROM tableA as a
                 INNER JOIN
                 DB2.TableB as b USING (cola)
            ";


    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
    wpdb object

    , dass dies die DB-Arbeit u. Abfragen in der Wordpressumgebung erleichtert. vgl. insgesamt hier: https://wordpress.stackexchange.com/questions/1604…parate-database

    und hier das Zitat:

    Zitat

    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
    $mydb = new wpdb('username','password','database','localhost');
    $rows = $mydb->get_results("select Name from my_table");
    echo "<ul>";
    foreach ($rows as $obj) :
       echo "<li>".$obj->Name."</li>";
    endforeach;
    echo "</ul>";

    konkret:

    Zitat

    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.

    ...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

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!