Error al obtener el blog_id correcto en MU desde functions.php

19 nov 2010, 17:57:02
Vistas: 524
Votos: 3

Tengo un script en mi functions.php que busca localizar el directorio de medios del sitio donde está instalado el tema. Esto es bastante simple a menos que el sitio sea un sitio MU (Multisite). En ese caso, el directorio de medios se basa en el blog_id.

Sin embargo, mi código a continuación está devolviendo el ID del sitio principal en lugar del blog_id del sitio donde se está ejecutando...

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

En este caso, el blog_id real es 3, sin embargo, está devolviendo un valor de 1 para $current_site->blog_id

El error es...

no se puede abrir wp-content/blogs.dir/1/files/
1
Comentarios

Tengo el mismo problema pero no sé cómo solucionarlo.

User User
19 abr 2011 04:56:51
Todas las respuestas a la pregunta 2
0

Compara $current_site->id con $current_site->blog_id. Según la documentación en línea, blog_id debería funcionar... pero verifica si hay una gran diferencia allí (tu sistema podría tener un plugin o algo más que esté causando un problema).


Actualización - Ignora lo anterior

Parece que $current_site es una variable global definida por tu sitio o red y siempre devolverá el mismo blog_id que tu panel de red - en este caso, "1".

Lo que necesitas usar en su lugar es $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/';

Eso debería darte la información correcta.

19 nov 2010 18:03:07
3

Otro problema común es usar la ruta fija /wp-content/ en tu código. En su lugar, utiliza WP_CONTENT_DIR para acceder a archivos y WP_CONTENT_URL para solicitudes HTTP, o mejor aún, wp_upload_dir() para ambos. Tengo algunas instalaciones donde wp-content está en otro dominio y en una ruta fuera del directorio de WordPress.

Por lo tanto, incluso si obtienes el blogi_id correcto, es posible que no encuentres los archivos. :)

Actualización

Mi pequeño plugin de depuración Mostrar información de subida puede dar algunas pistas. Pero los resultados de is_dir() no son confiables, lamentablemente.

20 nov 2010 00:48:30
Comentarios

Buen punto. (El diablo está en los detalles rofmlmaolol)

hakre hakre
20 nov 2010 03:09:30

esa podría ser la solución. Estoy encontrando que WPMU no crea el directorio hasta que algo se sube por primera vez. Por lo tanto, mi verificación genera un error en ese caso. ¿Cuál es el resultado de wp_upload_dir() en ese caso?

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

Devuelve los directorios correctos, pero no indica si existen. Incluso is_dir() devuelve true – lo cual aún podría ser mentira. Extraño.

fuxia fuxia
22 nov 2010 14:22:37