使用PHP根据优先级/订单号对包含进行重新排序


Using PHP to reorder includes based on priority / order number

我正在使用wordpress,我正在为网站的每个页面创建一个"小部件选择器"。在每个页面的后端,我有15个复选框——如果用户选择了一个复选框,它会在该页面的侧边栏中显示特定的小部件。

我有一个很大的PHP文档,包含15个内容。每个include都是一个小部件。如果用户选中该页面上的框,则会触发该包含,如下所示:

 if( in_array( 'Blog', get_field('modules') ) ) { 
    include 'modules/blog.php'; 
 }

这太棒了!但是,用户无法指定小部件的显示顺序。我需要开发某种系统,允许用户选择模块的顺序。

以下是我的想法-如果我能让每个复选框吐出指定的顺序,我需要在php中用某种方法来重新定位includes:

 if( in_array( 'Blog', get_field('modules') ) ) { 
    $order = 2;
    include 'modules/blog.php'; 
 }
if( in_array( 'Gallery', get_field('modules') ) ) { 
    $order = 1;
    include 'modules/gallery.php'; 
}

现在,我需要一些方法来根据他们提供的订单重新排序这两个"块"。我能以某种方式做到这一点吗?显然,我想使用PHP,但如果不可能的话,我可以用jQuery来实现。有什么想法吗?

不包括模块,而是将列表推送到一个数组中,该数组最终将包括模块。类似:

$final_modules = array();
 if( in_array( 'Blog', get_field('modules') ) ) { 
    $order = 2;
    $final_modules[$order] = 'modules/blog.php';
 }
if( in_array( 'Gallery', get_field('modules') ) ) { 
    $order = 1;
    $final_modules[$order] = 'modules/gallery.php';
}
//sort based on key
ksort($final_modules);
foreach($final_modules as $order => $include_file) {
    include $include_file;
}