我想允许用户上传自定义文件到特定的插件目录。问题是,很明显,WP会在插件版本更新时删除所有内容。
我认为upgrader_pre_install
和upgrader_post_install
钩子可能很有用,但不幸的是,到目前为止,我无法找到任何帮助我的信息。
在您看来,这些钩子可以用来保留目录吗?如果可以,怎么做?我是否应该简单地将目录复制到其他地方,如uploads文件夹,然后用upgrader_post_install
? 最佳做法是什么?
谢谢
我想允许用户上传自定义文件到特定的插件目录。问题是,很明显,WP会在插件版本更新时删除所有内容。
我认为upgrader_pre_install
和upgrader_post_install
钩子可能很有用,但不幸的是,到目前为止,我无法找到任何帮助我的信息。
在您看来,这些钩子可以用来保留目录吗?如果可以,怎么做?我是否应该简单地将目录复制到其他地方,如uploads文件夹,然后用upgrader_post_install
? 最佳做法是什么?
谢谢
在这里回答我自己的问题是为了保持问题的答案。这样做的目的是在升级之前复制重要目录,并在升级之后恢复它:
function my_dir_copy($source, $dest)
{
if (is_link($source)) {
return symlink(readlink($source), $dest);
}
if (is_file($source)) {
return copy($source, $dest);
}
if (!is_dir($dest)) {
mkdir($dest);
}
$dir = dir($source);
while (false !== $entry = $dir->read()) {
if ($entry == \'.\' || $entry == \'..\') {
continue;
}
my_dir_copy("$source/$entry", "$dest/$entry");
}
$dir->close();
return true;
}
function my_dir_rmdirr($dirname)
{
if (!file_exists($dirname)) {
return false;
}
if (is_file($dirname)) {
return unlink($dirname);
}
$dir = dir($dirname);
while (false !== $entry = $dir->read()) {
if ($entry == ‘.’ || $entry == ‘..’) {
continue;
}
rmdirr(“$dirname/$entry”);
}
$dir->close();
return rmdir($dirname);
}
function my_dir_backup()
{
$to = dirname(__FILE__)."/../igr_backup/";
$from = dirname(__FILE__)."/whatever_directory_you_preserve/";
my_dir_copy($from, $to);
}
function my_dir_recover()
{
$from = dirname(__FILE__)."/../igr_backup/";
$to = dirname(__FILE__)."/whatever_directory_you_preserve/";
my_dir_copy($from, $to);
if (is_dir($from)) {
my_dir_rmdirr($from);
}
}
add_filter(\'upgrader_pre_install\', \'my_dir_backup\', 10, 2);
add_filter(\'upgrader_post_install\', \'my_dir_recover\', 10, 2);
插件目录不能用于上载:
您可能没有此处的写入权限使用上载目录进行上载。这是唯一安全的地方
另请参见:How to prevent specific plugin files or subfolders from appearing under “plugin files” listing 与相关问题–以及相同的解决方案。