Error al obtener el blog_id correcto en MU desde functions.php
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/

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.

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.

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?
