我正在制作一个Wordpress主题,主要用于投资组合。
将插件插入主题是不好的,因为如果您这样做,更改主题可能会成为用户和您自己的问题。所以我正在制作一些脚本,它采用我在我的主题中制作的插件文件夹,其中包含我将在主题中构建的插件,但是当我选择我的主题时,我将自己安装。因此,这些插件可通过仪表板更新,并自动安装(如果尚未安装)到站点中。好主意没有? (我是从论坛帖子中得到的,但据我所知,我不认为它已经完成了。)
所以我的主题中有一个插件文件夹,里面有我想要自动安装的插件。我想将插件(单个文件或目录)复制到wp-content / plugins文件夹中,然后安装/激活它们。
问题是当我尝试复制时,它会出错
Warning: copy(http://127.0.0.1/inside-theme/wordpress/wp-content/plugins): failed to open stream: HTTP wrapper does not support writeable connections in C:\**path-to-www-**\www\inside-theme\wordpress\wp-content\themes\Inside Theme\header.php on line 105
如果你想知道为什么它在header.php中,我只是为了测试目的这样做,看它是否复制。我会把它放在钩子里。
这是我用来复制插件的代码,
$dir = get_template_directory() . '/plugins/'; // the plugins folder in the theme
$plugins_in_theme = scandir($dir); // $dir's contents
$plugins_dir = plugins_url(); // url to the wp-content/plugins/
print_r($plugins_in_theme); // just to check the output, not important
foreach ($plugins_in_theme as $plugin) {
if ($plugin != '.' || '..') {
if (!file_exists($plugins_dir . $plugin)) {
if (is_dir($plugin)) {
recurse_copy($dir . $plugin, $plugins_dir);
} else {
copy($dir . $plugin, $plugins_dir);
}
}
}
}
recurse_copy()是我从另一个stackoverflow问题中获取的一个函数,用于复制目录,因为copy()只复制文件而不是文件夹。还要注意,它给出了多个错误,在大多数错误中提到了我的主题的functions.php,这是我放置recursive_copy()函数的地方。 (可以吗?这是我的第一个主题..)
function recurse_copy($src,$dst) { //for copying directories
$dir = opendir($src);
@mkdir($dst);
while(false !== ( $file = readdir($dir)) ) {
if (( $file != '.' ) && ( $file != '..' )) {
if ( is_dir($src . '/' . $file) ) {
recurse_copy($src . '/' . $file,$dst . '/' . $file);
}
else {
copy($src . '/' . $file,$dst . '/' . $file);
}
}
}
closedir($dir);
}
那么如何删除此错误并使其正常工作?
额外细节, 我正在使用Windows XP,而我正在使用'手工制作的wp'父主题,我正在运行这个本地。 (在当地主持人上)
希望我很清楚。
答案 0 :(得分:0)
您在返回$plugins_dir = plugins_url();
的代码中使用http://yoursite/wp-content/plugins/
但是,复制功能适用于目录而非URL,因此最好使用ABSPATH, dirname( __FILE__ ) . '/blablabla.php'
和其他函数返回目录而非URL。点击此处了解有关PHP copy function