Sharding BLOGUPLOADDIR

时间:2011-10-24 作者:Ünsal Korkmaz

我正在尝试分享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个博客,博客群都会发生变化。。我试过了upload_dir 过滤器,但我需要在它之前定义。我试过日出。php,但其中似乎没有定义$wpdb->blogid。这有什么好办法?

2 个回复
最合适的回答,由SO网友:Annika Backstrom 整理而成

复制的正文wp-includes/ms-settings.php 进入sunrise.php, 从第25行到第127行。在底部,添加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.php 将加载sunrise.php. 当执行返回到ms-settings.php, 它会看到的$current_site$current_blog ,它将跳过那个巨大的if语句。记住更新你的日出。升级WordPress时使用php。

不需要copypasta的极端黑客解决方案将涉及wp_start_object_cache() 覆盖(发现$current_blog 和呼叫ms_upload_constants()), 但我们不要去那里。

SO网友:EarnestoDev

在中定义它wp-config.php. 问题是您无法访问$wpdb->blogid 但试着为每个博客创建一个特殊的内部编码(通过子域或域/路径的第一个片段)。在最坏的情况下,您可以快速连接mysql并自己获取博客ID。在数据库中找到它后,将其存储在XML或其他格式中。

定义常量后插件就会启动,除非你愿意对核心进行一次小小的破解:)。。。您唯一的机会就是使用wp config。php加上一些**自定义blog\\u id**,您必须手动(通过代码)生成和管理。

这是可行的,它只需要一点额外的工作,为您的环境定制

结束

相关推荐

Multisite features

我在考虑创建一个由用户创建的博客组成的网络。我读过一些关于wordpress多站点功能的文章,我想知道这是否是我想要的。。。我需要做的是创建一个网站,让用户注册并创建他们的onw博客。wordpress multisite是否提供此功能?如果不是,手动将此功能实现到wp中是可行的,还是应该从0或其他平台开始?非常感谢。