web-dev-qa-db-fra.com

Utilisation d'une bibliothèque multimédia pour un réseau multisite avec la bibliothèque multimédia Wordpress 3.5

Je cherche actuellement à modifier Wordpress afin qu'il utilise toujours le site principal pour les images. Je réalise cela en utilisant:

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');

Bien que cela fonctionne pour l'ancienne médiathèque, cela ne modifie pas la nouvelle médiathèque. Existe-t-il un moyen de configurer la nouvelle bibliothèque (qui, je le sais, dépend fortement de JavaScript) pour utiliser également la bibliothèque principale?

5
Ollie

À moins que vous n'utilisiez le site principal pour héberger tout votre contenu, y compris les pages et les publications, cela ne sera pas possible, et le plus proche que vous pouvez obtenir nécessite beaucoup de kludges.

Votre "kludge" actuel soulève de nombreux problèmes graves et constitue une bombe à retardement de performances de maintenance et de problèmes de sécurité. Ce serait le premier problème majeur, et je peux vous garantir que d'autres viendront.

Mais cela ne signifie pas que votre problème initial est invalide, mais simplement que votre solution n'est pas la solution et qu'une solution pour une solution n'est jamais bonne.

Pourquoi est-ce mauvais?

Le problème réside dans la façon dont les médias sont stockés. Oui, les fichiers sont stockés sur le disque du serveur, mais WordPress ne stocke pas ses données dans les fichiers, il les stocke en tant que pièces jointes.

Les pièces jointes sont des publications, avec type de publication 'pièce jointe', avec méta de publication, commentaires, taxonomies, titres, statut de publication, etc. Étant donné que chaque site d'un réseau possède son propre tableau de publication, et que les pièces jointes ont leur ensemble parent En ce qui concerne l'attachement, comment prendrions-nous une publication en pièce jointe à partir du site racine et la joindrions-nous à une publication dans un autre site sur plusieurs tables? L'identifiant post-parent est un identifiant et ne contient pas d'identifiant de site ou de réseau.

Donc ce n'est pas possible. Vous pouvez essayer d’obtenir quelques piratages pour insérer l’URL, mais ce serait beaucoup d’efforts et de tracas.

Par exemple, les modifications apportées à la méta, aux titres, etc. ne sont pas répercutées sur les sites. Si une image est supprimée, elle ne sera pas mise à jour sur tous les sites. Les galeries ne fonctionneront pas non plus et vous pourriez gâcher la publication -> relations d'attachement avec confusion post-identification. Beaucoup de plugins et de fonctionnalités ne fonctionneront pas correctement. Les images présentées enregistrent également l'ID de la pièce jointe, pas l'URL de la pièce jointe, de sorte que cela va être cassé aussi

Pourquoi votre ancien code ne fonctionne plus

L'ancien uploader était alimenté par thickbox et iframes, votre ancien code est donc accroché aux pages chargées pour chaque onglet. Cependant, le nouveau téléverseur n’est pas une boîte épaisse et une iframe, il est alimenté par backbone.js et a été complètement réécrit.

Comment je le ferais à la place

Je n'aurais pas accès à la bibliothèque principale. Au lieu de cela, je synchroniserais la bibliothèque principale (notez la distinction subtile). Lorsque vous créez une publication en pièce jointe sur le site principal, basculez sur chaque blog et dupliquez-le pour qu'il s'affiche également sur ces sites. Cela permet à tous les plugins et fonctionnalités standard de fonctionner comme prévu, et toutes les hypothèses retenues dans les opérations standard sont toujours vraies, et vous obtenez ce que vous vouliez.

Ensuite, connectez-vous à des titres post-édition, etc., de manière à mettre également à jour les autres sites du réseau.

Enfin, activez le plug-in sur tous les sites afin que, si une image est téléchargée sur un sous-site, elle soit recréée sur le site principal et que le reste soit visible par tous.

7
Tom J Nowell