Sharding BLOGUPLOADDIR

4

Eu estou tentando sharding BLOGUPLOADDIR mas não consegui sucesso atm. Este é o padrão:

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

Estou tentando configurá-lo:

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

Assim, a cada 2000 blogs, o bloggroup vai mudar .. Eu tentei upload_dir filter, mas preciso definir antes disso. Eu tentei sunrise.php mas $ wpdb- > blogid não está definido lá parece. Qual é o caminho certo disso?

    
por Ünsal Korkmaz 24.10.2011 / 02:35

2 respostas

4

Copie o corpo de wp-includes/ms-settings.php para sunrise.php , da linha 25 para a linha 127. Na parte inferior, adicione seu 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 carregará sunrise.php . Quando a execução retornar a ms-settings.php , ele verá que $current_site e $current_blog estão configurados e ignorará essa declaração if enorme. Lembre-se de atualizar seu sunrise.php ao atualizar o WordPress.

A solução hacky extrema que não requer copypasta envolveria uma das substituições wp_start_object_cache() (a única funcionalidade enganchada entre descobrir $current_blog e chamar ms_upload_constants() ), mas não vamos lá.

    
por Annika Backstrom 27.10.2011 / 15:21
-2

Defina-o em wp-config.php . O problema é que você não terá acesso ao $ wpdb- > blogid mas tentará criar uma codificação interna especial para cada blog (por subdomínio ou domínio / primeira-fatia-de- caminho) . No pior dos casos, você pode fazer uma conexão rápida com o mysql e pegar o ID do blog você mesmo. Depois de encontrá-lo no banco de dados, armazene-o em um XML ou algo assim.

Os plugins entram em ação depois que a constante é definida, a menos que você esteja disposto a fazer um pequeno truque no núcleo:) ... sua única chance é o uso de wp-config.php mais alguns ** blog_id ** s personalizados que você precisa manualmente (por código) gerar e gerenciar.

É factível, requer apenas um pouco de trabalho extra, personalizado sob medida para o seu ambiente ...

    
por EarnestoDev 24.10.2011 / 03:38