是否可以根据选项创建子菜单页面?在我的插件选项页面中,我获得了标题(子菜单页面)的输入字段。这些标题以逗号分隔。我在我的插件脚本中尝试了以下内容:
function my_menu() {
global $page_hook_suffix;
$page_hook_suffix = add_menu_page(...); //adding main menu
$titles=get_option('my_option_name');
$titles=explode(",",$titles);
if(!empty(get_option('my_option_name'))){
foreach($titles as $title){
$slug = str_replace(' ', '_', $title);
add_submenu_page("main_menu_name", "$title", "$title", 'manage_options', "$slug", "$slug");
}
}
}
add_action( 'admin_menu', 'my_menu' );
到目前为止这是有效的。但现在我需要在子菜单页面上显示内容。但是,甚至可以动态创建(内容)函数吗?我不知道如何使用函数名作为变量。
我试过了:
if(!empty(get_option('my_option_name'))){
foreach($titles as $title){
$slug = str_replace(' ', '_', $title) . "()";
function $slug {
echo "hi!";
}
}
}
看起来很愚蠢,当然不起作用。发生以下错误:
解析错误:语法错误,意外'$ slug'(T_VARIABLE)
甚至可能吗?如果是,如何使用变量作为函数名?
答案 0 :(得分:0)
eval()是解决方案:
if(!empty(get_option('my_option_name'))){
$titles=get_option('my_option_name');
$titles=explode(",",$titles);
foreach($titles as $title){
$slug = str_replace(' ', '_', $title);
eval(' function '.$slug.'() {
echo '.$title.';
}'
);
}
}