Sharding BLOGUPLOADDIR

4

Estoy tratando de fragmentar BLOGUPLOADDIR pero no puedo tener éxito a la atmósfera. Este es el predeterminado:

define( 'BLOGUPLOADDIR', WP_CONTENT_DIR . "/blogs.dir/{$wpdb->blogid}/files/" );

Estoy intentando configurarlo:

if($wpdb->blogid<10){ 
    $bloggroup = 'global';
}else{
    $bloggroup = 'bloggroup'.floor($wpdb->blogid/2000+1); // 1999->1, 2000->2
}
define( 'BLOGUPLOADDIR', WP_CONTENT_DIR . "/blogs.dir/{$bloggroup}/{$wpdb->blogid}/files/" );

Por lo tanto, cada 2000 blogs, bloggroup cambiará .. Intenté upload_dir filter pero antes debo definirlo. Intenté sunrise.php pero parece que $ wpdb- > blogid no está definido allí. ¿Cuál es la mejor manera de esto?

    
pregunta Ünsal Korkmaz 24.10.2011 - 02:35

2 respuestas

4

Copie el cuerpo de wp-includes/ms-settings.php en sunrise.php , de la línea 25 a la línea 127. En la parte inferior, agregue su BLOGUPLOADDIR define.

// from ms-settings.php
ms_subdomain_constants();

if ( !isset( $current_site ) || !isset( $current_blog ) ) {
    // [trimmed, but you need the whole if block]
}
// end of ms-settings.php copy

if ( $current_blog->blog_id < 10 ) {
    $bloggroup = 'global';
} else {
    $bloggroup = 'bloggroup' . floor( $current_blog->blog_id / 2000 + 1 ); // 1999->1, 2000->2
}

// from ms-default-constants.php: ms_upload_constants()
define( 'UPLOADBLOGSDIR', 'wp-content/blogs.dir' );
define( 'UPLOADS', UPLOADBLOGSDIR . "/{$bloggroup}/{$current_blog->blog_id}/files/" );
define( 'BLOGUPLOADDIR', WP_CONTENT_DIR . "/blogs.dir/{$bloggroup}/{$current_blog->blog_id}/files/" );

ms-settings.php cargará sunrise.php . Cuando la ejecución vuelva a ms-settings.php , verá que $current_site y $current_blog están configurados, y se saltará esa enorme instrucción if. Solo recuerda actualizar tu sunrise.php cuando actualices WordPress.

La solución hacky extrema que no requiere copypasta implicaría una de las anulaciones wp_start_object_cache() (la única funcionalidad enlazable entre descubrir $current_blog y llamar a ms_upload_constants() ), pero no vayamos allí.

    
respondido por el Annika Backstrom 27.10.2011 - 15:21
-2

Defínelo en wp-config.php . El problema es que no tendrá acceso a $ wpdb- > blogid , pero intente crear una codificación interna especial para cada blog (por subdominio o dominio / primer segmento de ruta) . En el peor de los casos, puedes hacer una conexión mysql rápida y obtener la ID del blog. Una vez que lo encuentre en la base de datos, almacénelo en un XML o algo así.

Los plugins se activan después de que se define la constante, de modo que, a menos que esté dispuesto a hacer un pequeño hack al núcleo:) ... su única posibilidad es usar wp-config.php más algunos ** blog_id personalizados ** s tendrías que (por código) generar y administrar manualmente.

Es factible, solo requiere un poco de trabajo adicional, adaptado a la medida de su entorno ...

    
respondido por el EarnestoDev 24.10.2011 - 03:38

Lea otras preguntas en las etiquetas