web-dev-qa-db-fra.com

Sharding BLOGUPLOADDIR

J'essaye de découper BLOGUPLOADDIR mais je ne pourrais pas obtenir le succès atm. C'est celui par défaut:

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

J'essaye de le définir:

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/" );

Donc, tous les 2000 blogs, bloggroup va changer .. J'ai essayé filtre upload_dir mais je dois définir avant. J'ai essayé sunrise.php mais $ wpdb-> blogid n'est pas défini ici, semble-t-il. Quelle est la bonne façon de cela?

4
Ünsal Korkmaz

Copiez le corps de wp-includes/ms-settings.php dans sunrise.php, de la ligne 25 à la ligne 127. En bas, ajoutez votre BLOGUPLOADDIR définit.

// 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 va charger sunrise.php. Lorsque l'exécution retourne à ms-settings.php, il verra que $current_site et $current_blog sont définis et ignorer cette énorme instruction if. Rappelez-vous simplement de mettre à jour votre sunrise.php lorsque vous mettez à jour WordPress.

Une solution extrême qui ne nécessite pas de copypasta impliquerait l’un des remplacements wp_start_object_cache() (la seule fonctionnalité pouvant être accrochée entre la découverte de $current_blog et l’appel de ms_upload_constants()), mais n’y allons pas.

4
Annika Backstrom