Eroare la obținerea blog_id corect pe MU din functions.php

19 nov. 2010, 17:57:02
Vizualizări: 524
Voturi: 3

Am un script în functions.php care încercă să localizeze directorul media al site-ului în care este instalată tema. Acest lucru este destul de simplu, cu excepția cazului în care site-ul este un site MU. În acest caz, directorul media se bazează pe blog_id.

Totuși, codul meu de mai jos returnează id-ul site-ului principal în loc de blog_id-ul site-ului în care rulează...

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

În acest caz, blog_id-ul real este 3, dar returnează valoarea 1 pentru $current_site->blog_id

Eroarea este...

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

Am aceeași problemă, dar nu știu cum să o rezolv.

User User
19 apr. 2011 04:56:51
Toate răspunsurile la întrebare 2
0

Compară $current_site->id cu $current_site->blog_id. Conform documentației în linie, blog_id ar trebui să funcționeze... dar verifică dacă există o diferență majoră acolo (sistemul tău ar putea avea un plugin sau altceva care cauzează o problemă).


Actualizare - Ignoră ultimul

Se pare că $current_site este o variabilă globală definită de site-ul sau rețeaua ta și va întoarce întotdeauna același blog_id ca și panoul de control al rețelei - în acest caz, "1".

Ceea ce trebuie să folosești în schimb este $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/';

Asta ar trebui să-ți ofere informația corectă.

19 nov. 2010 18:03:07
3

Un alt obstacol este utilizarea codificată direct a /wp-content/. Folosește WP_CONTENT_DIR pentru accesul la fișiere și WP_CONTENT_URL pentru cererile HTTP sau, mai bine, wp_upload_dir() pentru ambele. Am unele instalări unde wp-content este pe alt domeniu și într-o cale în afara directorului WordPress.

Deci, chiar dacă obții blogi_id corect, s-ar putea să nu găsești fișierele. :)

Actualizare

Micul meu plugin de depanare Show Upload Info poate oferi câteva indicii. Dar rezultatele is_dir() nu sunt de încredere, din păcate.

20 nov. 2010 00:48:30
Comentarii

Bună observație. (Diavolul se ascunde în detalii rofmlmaolol)

hakre hakre
20 nov. 2010 03:09:30

asta ar putea fi soluția. Am observat că WPMU nu creează directorul până când nu se încarcă ceva pentru prima dată. Prin urmare, verificarea mea generează o eroare în acest caz. Care este rezultatul funcției wp_upload_dir() în acest caz?

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

Returnează directoarele corecte, dar nu spune dacă acestea există. Chiar și is_dir() returnează true – ceea ce totuși poate fi o minciună. Ciudat.

fuxia fuxia
22 nov. 2010 14:22:37