wake-up-neo.net

Verwenden einer Medienbibliothek für ein Netzwerk mit mehreren Standorten und einer Wordpress 3.5-Medienbibliothek

Ich bin gerade dabei, Wordpress so zu ändern, dass es immer die primäre Site für Bilder verwendet. Ich erreiche dies mit:

function use_main_blog_library()
{
    echo "<script>alert('is happenin');</script>";
    switch_to_blog(1);
}
add_action('load-media-new.php', 'use_main_blog_library');
add_action('load-media-upload.php', 'use_main_blog_library');
add_action('load-media.php', 'use_main_blog_library');
add_action('load-upload.php', 'use_main_blog_library');

Dies funktioniert zwar für die alte Medienbibliothek, ändert jedoch nicht die neue Medienbibliothek. Kann ich die neue (von der ich weiß, dass sie stark von JavaScript abhängt) so einstellen, dass sie auch die primäre Bibliothek verwendet?

5
Ollie

Solange Sie die primäre Website nicht zum Hosten sämtlicher Inhalte einschließlich Seiten und Posts verwenden, ist dies nicht möglich und der nächstmögliche Zugriff erfordert eine Menge Kludges.

Ihr vorhandener "Kludge" führt zu einer Reihe schwerwiegender Probleme und war eine Zeitbombe für Wartungsleistung und Sicherheitsprobleme. Dies wäre das erste große Problem, und ich kann garantieren, dass noch mehr kommen werden.

Das heißt aber nicht, dass Ihr ursprüngliches Problem ungültig ist, nur dass Ihr Fix nicht die Lösung ist und ein Fix für einen Fix niemals gut ist.

Warum ist es schlecht?

Das Problem liegt darin, wie Medien gespeichert werden. Ja, die Dateien werden auf der Server-Festplatte gespeichert, aber WordPress speichert die Daten nicht in den Dateien, sondern als Anhänge.

Anhänge sind Posts mit dem Post-Typ "Anhang", mit Post-Meta, Kommentaren, Taxonomien, Titeln, Post-Status usw. Da jede Site in einem Netzwerk über eine eigene Post-Tabelle verfügt und für Anhänge deren übergeordnetes Element als Post festgelegt wurde. Wie würden wir einen Anhangspost von der Stammwebsite anhängen und ihn tabellenübergreifend an einen Post auf einer anderen Site anhängen? Die übergeordnete Beitrags-ID ist eine Beitrags-ID und enthält keine Standort- oder Netzwerk-ID.

Das ist also nicht möglich. Sie könnten versuchen, einige Hacks zum Einfügen der URL zu bekommen, aber es wäre ein großer Aufwand.

Sie haben auch Probleme, z. B. Änderungen an Meta, Titeln usw., die nicht über Websites übertragen werden. Wenn ein Bild gelöscht wird, wird es nicht über Websites aktualisiert, Galerien funktionieren auch nicht und Sie könnten den Beitrag durcheinander bringen -> Anhangsbeziehungen mit Post-ID-Verwechslung. Viele Plugins und Funktionen funktionieren nicht richtig. Bei ausgewählten Bildern wird auch die Anhangs-ID und nicht die Anhangs-URL gespeichert, sodass auch diese nicht mehr funktioniert

Warum Ihr alter Code nicht mehr funktioniert

Der alte Uploader wurde von Thickbox und Iframes betrieben, sodass sich Ihr alter Code in die Seiten einfügt, die für die einzelnen Registerkarten geladen wurden. Der neue Uploader ist jedoch keine Thickbox und kein Iframe, er wird mit backbone.js betrieben und wurde komplett neu geschrieben.

Wie ich es stattdessen machen würde

Ich würde nicht auf die Hauptbibliothek zugreifen. Stattdessen würde ich die Hauptbibliothek synchronisieren (beachten Sie den feinen Unterschied). Wenn Sie einen Anhang auf der primären Site erstellen, wechseln Sie zu jedem Blog und duplizieren Sie ihn, damit er auch auf diesen Sites angezeigt wird. Dies ermöglicht, dass alle Plugins und Standardfunktionen wie erwartet funktionieren, und alle Annahmen, die von Standardoperationen vertreten werden, gelten weiterhin, und Sie erhalten, was Sie wollten.

Anschließend können Sie die Post-Edit-Titel usw. einbinden, um auch die anderen Websites im Netzwerk zu aktualisieren.

Aktivieren Sie schließlich das Plugin auf allen Websites, damit ein hochgeladenes Bild auf einer Unterwebsite auf der Primärwebsite wiederhergestellt wird und der Rest für alle sichtbar ist.

7
Tom J Nowell