web-dev-qa-db-fra.com

Erreur lors de l'obtention du blog_id correct sur MU à partir de functions.php

J'ai le script dans mon functions.php qui cherche à localiser le répertoire de médias du site dans lequel le thème est installé. C'est assez simple, sauf si le site est un site MU. Dans ce cas, le répertoire multimédia est basé sur le blog_id.

Cependant, mon code ci-dessous renvoie l'id du site principal plutôt que le blog_id du site sur lequel il est exécuté ...

function get_image_list()
{
    global $current_site;
    $dir=is_multisite() ?  'wp-content/blogs.dir/'.$current_site->blog_id.'/files/' : 'wp-content/uploads/';
    $url=is_multisite() ?  get_bloginfo('url').'/wp-content/blogs.dir/'.$current_site->blog_id.'/files/' : get_bloginfo('url').'/wp-content/uploads/';

Dans ce cas, blog_id est 3, mais renvoie une valeur de 1 pour $ current_site-> blog_id.

L'erreur est ...

cannot open wp-content/blogs.dir/1/files/
3
Scott B

Comparez $current_site->id avec $current_site->blog_id. Selon la documentation en ligne, blog_id devrait fonctionner ... mais vérifiez s'il y a une différence majeure (votre système peut avoir un plug-in ou quelque chose qui cause un problème).


Mise à jour - Ignorer le dernier

Il semble que $current_site soit une variable globale définie par votre site ou réseau et retournera toujours le même blog_id que votre tableau de bord réseau - dans ce cas, "1."

Ce que vous devez utiliser à la place est $current_blog:

function get_image_list() {
    global $current_blog;
    $dir=is_multisite() ?  'wp-content/blogs.dir/'.$current_blog->blog_id.'/files/' : 'wp-content/uploads/';
    $url=is_multisite() ?  get_bloginfo('url').'/wp-content/blogs.dir/'.$current_blog->blog_id.'/files/' : get_bloginfo('url').'/wp-content/uploads/';

Cela devrait vous donner la bonne information.

4
EAMann

Un autre piège est votre /wp-content/ codé en dur. Utilisez WP_CONTENT_DIR pour accéder aux fichiers et WP_CONTENT_URL pour les requêtes HTTP ou encore mieux wp_upload_dir() pour les deux. J'ai quelques installations en cours d'exécution où wp-content est sur un autre domaine et dans un chemin en dehors du répertoire WordPress.

Ainsi, même si vous obtenez le blogi_id correct, vous risquez de ne pas trouver les fichiers. :)

Mettre à jour

Mon petit plugin de débogage Afficher les infos de téléchargement peut donner des indices. Mais les résultats de is_dir() ne sont pas fiables, malheureusement.

3
fuxia