web-dev-qa-db-ja.com

BLOGUPLOADDIRの断片化

私はBLOGUPLOADDIRをシャーディングしようとしていますが、成功しませんでしたatm。これはデフォルトのものです。

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

設定しようとしています。

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

そのため、2000年のブログごとに、bloggroupが変わります。upload_dirフィルターを試しましたが、その前に定義する必要があります。私はsunrise.phpを試したが$ wpdb-> blogidがそこに定義されていないようだ。いただきましたこれの正しい方法?

4
Ünsal Korkmaz

25行目から127行目までで、wp-includes/ms-settings.phpの本体をsunrise.phpにコピーします。最後に、BLOGUPLOADDIRの定義を追加します。

// 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.phpsunrise.phpをロードします。実行がms-settings.phpに戻ると、$current_site$current_blogが設定されていることがわかり、その巨大なifステートメントはスキップされます。 WordPressをアップグレードするときにsunrise.phpを更新することを忘れないでください。

Copypastaを必要としない極端なハックな解決策は、wp_start_object_cache()のオーバーライド($current_blogの発見とms_upload_constants()の呼び出しの間の唯一のフック可能な機能)の1つを含みますが、そこには行かないでください。

4