下面的脚本旨在获取定义为“WIDGET”的每个文件夹并遍历其文件,将其内容作为小部件对象加载到数据库中。
它工作正常,但是,正如您在下面看到的,对于我想要执行此例程的小部件文件夹中的每个文件夹,我必须创建一个几乎相同的代码的单独分支,用硬编码的 DEFINE 语句播种包含该小部件对象的小部件内容的文件夹的路径。例如,该小部件对象的文件夹名称 (WIDGET) 和 $sidebar_id(它们是相同的)。
由于我在“widgets”目录中命名我的文件夹,与我在数据库中注册的“widgets”相同,我想将此例程转换为一个动态的例程,循环遍历“widgets”文件夹内的目录和对于它找到的每个文件夹,执行以 DEFINE 语句开头的代码。
我如何将其转换为对“小部件”文件夹内的任何文件夹执行的单个例程?
//Install Wigets
$sidebars_widgets = get_option('sidebars_widgets');
$widget_id = count($opts)+1;
$widget_ops = get_option('widget_text');
//1st Widget Area
//make this directory pointer dynamic based on which folder under widgets we are currently working on
DEFINE ('WIDGET', ABSPATH.'/wp-content/plugins/myplugin/widgets/home-header-area/');
$directory_widgets = new DirectoryIterator(WIDGET);
foreach ($directory_widgets as $files_widgets) {
if ($files_widgets->isFile()) {
$file_name_widget = $files_widgets->getFilename();
$widget_text = file_get_contents(WIDGET. $file_name_widget);
$sidebar_id = 'home-header-widget'; //make this dynamic based on the current foldername in the loop
$sidebars_widgets[$sidebar_id] = array("text-".$widget_id);
$widget_ops[$widget_id] = array('title' => $files_widgets->getBasename('.txt'),'text' => $widget_text,);
update_option('widget_text', $widget_ops);
update_option('sidebars_widgets', $sidebars_widgets);
}
}
//2nd Widget Area
//make this directory pointer dynamic based on which folder under widgets we are currently working on
DEFINE ('WIDGET', ABSPATH.'/wp-content/plugins/myplugin/widgets/inside-header-area/');
$directory_widgets = new DirectoryIterator(WIDGET);
foreach ($directory_widgets as $files_widgets) {
if ($files_widgets->isFile()) {
$file_name_widget = $files_widgets->getFilename();
$widget_text = file_get_contents(WIDGETS. $file_name_widget);
$sidebar_id = 'inside-header-widget'; //make this dynamic based on the current foldername in the loop
$sidebars_widgets[$sidebar_id] = array("text-".$widget_id);
$widget_ops[$widget_id] = array('title' => $files_widgets->getBasename('.txt'),'text' => $widget_text,);
update_option('widget_text', $widget_ops);
update_option('sidebars_widgets', $sidebars_widgets);
}
}
用查尔斯回答更新代码:
$base = dirname(__FILE__).'/widgets/';
$rdi = new RecursiveDirectoryIterator($base);
foreach(new RecursiveIteratorIterator($rdi) as $files_widgets)
{
if ($files_widgets->isFile())
{
$file_name_widget = $files_widgets->getFilename();
$widget_text = file_get_contents($base . [current directory?] .$file_name_widget);
//NOT SURE IF THIS IS IT OR NOT. I NEED THE CURRENT PARENT DIRECTORY'S NAME
$sidebar_id = $files_widgets->getBasename(); //make this dynamic based on the current foldername in the loop
$sidebars_widgets[$sidebar_id] = array("text-".$widget_id);
$widget_ops[$widget_id] = array('title' => $files_widgets->getBasename('.txt'),'text' => $widget_text,);
update_option('widget_text', $widget_ops);
update_option('sidebars_widgets', $sidebars_widgets);
}
}