0

我正在制作一个 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”父主题,我在本地运行。(在本地主机上)

希望我很清楚。

4

1 回答 1

0

$plugins_dir = plugins_url();在返回的代码中使用http://yoursite/wp-content/plugins/但是,复制函数适用于目录而不是 URL,因此最好使用,ABSPATH, dirname( __FILE__ ) . '/blablabla.php'其他函数返回目录而不是 URL。点击这里了解更多关于PHP 复制功能

于 2013-11-29T12:55:16.467 回答