IFrame Thickbox中的自定义管理员屏幕出错

时间:2012-11-03 作者:Randy Hoyt

我有一个插件,可以在iframe中添加一个新的管理屏幕。我在插件中创建了一个PHP文件,并在其中添加了一个带有Thickbox类的链接。一切正常,但当WP\\u DEBUG设置为true时,会产生PHP错误。看看WordPress的源代码,如果我从外部输入一个PHP,就无法避免这个错误/wp-admin/ 直接在iframe中。

注意:未定义的偏移量:1英寸/wp包括/变量。php在线28

之所以会出现这种情况,是因为WordPress在web地址上运行regex来提取文件名以设置$pagenow变量,但它假定文件将位于/wp admin/中。因为不是,所以没有匹配项。

这里是the plugin. 文件是children.php.

有没有更好的方法来创建自定义管理屏幕,该屏幕可以包含在通过/wp-admin/ 文件

1 个回复
SO网友:brasofilo

有趣的问题<调查一下,我发现[wp-hackers] thread 同一个Dion Hulse提供了更多的信息。

首先,一个带有简单链接的测试页面,它将在thickbox中打开另一个管理页面。

add_action(\'admin_menu\', \'wpse_71437_admin_submenu\');

function wpse_71437_admin_submenu() 
{
    add_menu_page(
        \'TB\', 
        \'<span style="color:#e57300;">Thickbox</span>\', 
        \'edit_pages\', 
        \'open_hidden_page_in_thickbox\', 
        \'wpse_71437_submenu_page\',
        \'\', // no icon
        1 // create before Dashboard menu item
    );
}

function wpse_71437_submenu_page() 
{
    wp_enqueue_style(\'thickbox\');
    wp_enqueue_script(\'thickbox\');
    ?>
    <div id="icon-upload" class="icon32"></div><h2>Thickbox</h2>
    <br><br>
    <a href="#" id="open-tb">Click Here</a>

    <script type="text/javascript">
    jQuery(document).ready(function() {   
        jQuery("#open-tb").click(function() {                 
            tb_show("", "index.php?page=video_page_hidden&TB_iframe=true");
            return false;
        });
    });             
    </script>
    <?php
}
现在,将在thickbox中打开的页面。其父级定义为null, 所以它不会出现在菜单中。回调函数是一个空函数,如果直接访问,则不会显示任何内容。

/**
 * Add a hidden and empty submenu page
 */
add_action(\'admin_menu\', \'wpse_71437_admin_menu\');

function wpse_71437_admin_menu() 
{
    add_submenu_page(
        null, // doesn\'t show up in the menu, attached to "index.php" (not sure why)
        \'Video\', 
        \'Video\', 
        \'edit_pages\', 
        \'video_page_hidden\', 
        \'wpse_71437_menu_options\'
    );
}

function wpse_71437_menu_options() { /* Print nothing */ }
最后,诀窍
拦截隐藏页面加载并打印一些iframe 内容:

/**
 * Intercept our hidden/empty page and print the Thickbox content
 */
add_action( \'load-dashboard_page_video_page_hidden\', \'wpse_71437_intercept_thickbox\' ); 

function wpse_71437_intercept_thickbox() 
{ 
    iframe_header(); 
    echo \'<iframe width="100%" height="380px" src="http://www.youtube.com/embed/cL6qe0b-_BA" frameborder="0" allowfullscreen></iframe>\';
    iframe_footer(); 
    exit; //Die to prevent the page continueing loading and adding the admin menu\'s etc. 
}

结束

相关推荐

已将wordPress从本地主机移至live,wp-admin显示白屏

嗨,我在本地主机上用wordpress开发了一个网站,然后将其移动到一个实时服务器上。除了wp管理外,一切正常。当我转到域/wp管理时,它会显示一个白色屏幕。然而,当我进入域/wp登录时。php它允许我登录到管理员。此外,如果我尝试创建新帖子或更新任何设置,它会一直显示一个空白的白色屏幕,但当刷新时,会保存设置/添加帖子等。网站是www.nuvogadgets。com。有什么想法吗?谢谢