将WordPress升级到4.4后无法升级主题或插件

时间:2015-12-11 作者:ralbatross

我刚刚将一个网站升级到WordPress版本4.4,现在每当我尝试升级任何插件或主题时,都会收到如下消息:

An error occurred while updating <plugin/theme name>: Could not create directory. <plugin/theme directory>
我已经在wp-content 目录(甚至所有子目录)到777,但每当我尝试升级插件或主题时,仍然会收到上面的消息。

有什么好处?

am 能够安装新插件,因此在插件文件夹中似乎没有权限问题。

更多研究:

在里面wp-admin/includes/class-wp-uploader.php, 第531-535行:

//Create destination if needed
if ( ! $wp_filesystem->exists( $remote_destination ) ) {
    if ( ! $wp_filesystem->mkdir( $remote_destination, FS_CHMOD_DIR ) ) {
        return new WP_Error( \'mkdir_failed_destination\', $this->strings[\'mkdir_failed\'], $remote_destination );
    }
}
当我尝试更新插件时,exists调用返回false。这是错误的。我可以看到$remote_destination 在我的OS shell中,它显然确实存在,因为mkdir调用失败,它无法生成目录,因为它已经存在。

深入挖掘,在wp-admin/includes/class-wp-filesystem-ftpext.php, 第329-338行:

public function exists( $file ) {
    $path = dirname( $file );
    $filename = basename( $file );    

    $file_list = @ftp_nlist( $this->link, \'-a \' . $path );
    if ( $file_list ) {
        $file_list = array_map( \'basename\', $file_list );
    }
    return $file_list && in_array( $filename, $file_list );
}
如果我在return语句之前添加以下行。。。

error_log(debug_backtrace()[1][\'function\'] . ": \\npath: $path\\nfilename: $filename\\nfile list:\\n" . print_r($file_list, true) . "\\n");
。。。我看到相关调用的输出。。。

[11-Dec-2015 18:42:19 UTC] install_package:
path: <the expected path>
filename: <the expected filename>
file list: 
Array
(
)
文件列表为空!不应该这样。这是怎么回事?

1 个回复
SO网友:Michael

在文件中wp-admin/includes/class-wp-filesystem-ftpext.php, 第333行:

代替

$file_list = @ftp_nlist( $this->link, \'-a \' . $path );
使用

$file_list = @ftp_nlist( $this->link, $path );

相关推荐

Testing Plugins for Multisite

我最近发布了一个WordPress插件,它在单个站点上非常有效。我被告知该插件在多站点安装上不能正常工作,我理解其中的一些原因。我已经更新了代码,现在需要一种方法来测试更新后的代码,然后才能转到实时客户的多站点安装。我有一个用于测试的WordPress安装程序的单站点安装,但需要在多站点安装上进行测试。根据我所能找到的唯一方法是在网络上至少有两个站点来安装整个多站点安装,以测试我的插件。设置WordPress的整个多站点安装是插件开发人员的唯一/首选方式,还是有更快的测试环境可用。