Errore nell'ottenere il blog_id corretto su MU da functions.php

19 nov 2010, 17:57:02
Visualizzazioni: 524
Voti: 3

Ho uno script nel mio functions.php che cerca di individuare la directory dei media del sito in cui è installato il tema. Questo è abbastanza semplice a meno che il sito non sia un sito MU. In quel caso, la directory dei media si basa sul blog_id.

Tuttavia, il mio codice qui sotto restituisce l'id del sito principale anziché il blog_id del sito in cui viene eseguito...

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

In questo caso, il blog_id effettivo è 3, tuttavia, restituisce un valore di 1 per $current_site->blog_id

L'errore è...

cannot open wp-content/blogs.dir/1/files/
1
Commenti

Ho lo stesso problema ma non so come risolverlo.

User User
19 apr 2011 04:56:51
Tutte le risposte alla domanda 2
0

Confronta $current_site->id con $current_site->blog_id. Secondo la documentazione in linea, blog_id dovrebbe funzionare... ma controlla se c'è una differenza significativa (il tuo sistema potrebbe avere un plugin o qualcos'altro che causa un problema).


Aggiornamento - Ignora l'ultimo

Sembra che $current_site sia una variabile globale definita dal tuo sito o rete e restituirà sempre lo stesso blog_id del tuo pannello di controllo della rete - in questo caso, "1".

Ciò che devi usare invece è $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/';

Questo dovrebbe fornirti le informazioni corrette.

19 nov 2010 18:03:07
3

Un altro problema è l'uso del percorso fisso /wp-content/ nel codice. Utilizza WP_CONTENT_DIR per l'accesso ai file e WP_CONTENT_URL per le richieste HTTP, o ancora meglio wp_upload_dir() per entrambi. Ho alcune installazioni dove wp-content si trova su un altro dominio e in un percorso esterno alla directory di WordPress.

Quindi, anche se ottieni il corretto blogi_id, potresti non trovare i file. :)

Aggiornamento

Il mio piccolo plugin di debug Mostra Info Upload potrebbe fornire alcuni indizi. Purtroppo, però, i risultati di is_dir() non sono affidabili.

20 nov 2010 00:48:30
Commenti

Bel colpo. (Il diavolo si nasconde nei dettagli rofmlmaolol)

hakre hakre
20 nov 2010 03:09:30

potrebbe essere la soluzione. Sto scoprendo che WPMU non crea la directory finché non viene caricato qualcosa. Quindi, il mio controllo genera un errore in quel caso. Qual è l'output di wp_upload_dir() in quel caso?

Scott B Scott B
22 nov 2010 12:59:40

Restituisce le directory corrette, ma non dice se esistono. Anche is_dir() restituisce true – il che potrebbe comunque essere una bugia. Strano.

fuxia fuxia
22 nov 2010 14:22:37