web-dev-qa-db-fra.com

Utiliser le même répertoire pour stocker toutes les images téléchargées sur un réseau Wordpress

J'utilise actuellement un réseau Wordpress afin de gérer plusieurs sites utilisant le même modèle, les mêmes plugins et les mêmes images. Lorsque les publications apparaissent sur plusieurs sites, il est logique de ne télécharger des images que dans un seul emplacement (et de disposer d'une copie d'une image), plutôt que de plusieurs.

Est-ce que je pourrais peut-être y parvenir en créant une réécriture personnalisée? Ou y a-t-il un meilleur moyen d'y parvenir?

Informations d'arrière-plan

J'utilise WPThree Broadcast pour "diffuser" une image sur plusieurs sites, et donc aussi pour copier les images dans leurs bibliothèques d'images respectives. Je ne veux pas que le serveur soit encombré de dix copies de la même image; je vérifie donc si l'image se trouve déjà dans la table wp_posts d'un site et ensuite, si elle ne copie pas les données post et post_meta dans les tables de ce site.

Cependant, je souhaite pas copier l'image réelle dans un nouveau dossier de téléchargement, comme le fichier par défaut WP est configuré pour le faire (par exemple, dans /wp-content/blogs.dir/2/files/). Par conséquent, je souhaite que toutes les images être chargé dans /wp-content/uploads/, le dossier de téléchargement par défaut pour une installation standard WP.

5
Ollie

Vous pouvez assez simple ajouter des actions pour archiver cela.

function wpse_16722_main_uploads() {
    switch_to_blog(1);
}
add_action('load-media-new.php', 'wpse_16722_main_uploads');
add_action('load-media-upload.php', 'wpse_16722_main_uploads');
add_action('load-media.php', 'wpse_16722_main_uploads');
add_action('load-upload.php', 'wpse_16722_main_uploads');
add_action('admin_init', 'wpse_16722_main_uploads');

Ceci changera le sous-blog actuel en utilisateur de votre site principal à l’aide de switch_to_blog et bien sûr, vous voulez que le côté principal soit identifié par l’id 1.

Vous pouvez également ajouter une fonction pour réécrire le dossier de téléchargement en/uploads sans les sous-répertoires:

function wpse_16722_upload_dir( $args ) {
    $newdir = '/';

    $args['path']    = str_replace( $args['subdir'], '', $args['path'] ); //remove default subdir
    $args['url']     = str_replace( $args['subdir'], '', $args['url'] );      
    $args['subdir']  = $newdir;
    $args['path']   .= $newdir; 
    $args['url']    .= $newdir; 

    return $args;
}
add_filter( 'upload_dir', 'wpse_16722_upload_dir' );
4
Pontus Abrahamsson

Dans l'article "Comment modifier l'emplacement de téléchargement du média par défaut dans WordPress 3.5" par le personnel éditorial, ils montrent comment modifier le répertoire de téléchargement dans wp-config.php:

define( 'UPLOADS', 'wp-content/'.'files' );
0
James H.