创建没有插件菜单的WordPress管理页面

时间:2014-02-23 作者:Greeso

我正在编写一个插件,它将列出一组自定义表中的一些条目。我使用以下WordPress功能为插件添加了主页:

// Add menu and pages to WordPress admin area
add_action(\'admin_menu\', \'myplugin_create_top_level_menu\');

function myplugin_create_top_level_menu() {
    add_menu_page(\'MyPlugin\', \'MyPlugin\', \'manage_options\', \'myplugin-top-level-admin-menu\');
    add_submenu_page(\'myplugin-top-level-admin-menu\', \'MyPlugin Admin Page\', \'Admin Page\', \'manage_options\', \'myplugin-top-level-admin-menu\', \'myplugin_admin_page\');
}

function myplugin_admin_page {
    // Code to display the admin page for my plugin (both php and html code)
    // This includes the following seudo code (in php)
    foreach ($results_from_db as $result) {
        // CODE TO DISPLAY RESULTS IN AN HTML TABLE *** I NEED HELP HERE ***
    }
}
现在,如果仔细阅读上述代码,您会注意到有一条注释\'I NEED HELP HERE\'; 以下是更多详细信息:

我知道如何在我创建的管理页面上显示所有内容。管理页面将读取自定义表,并将结果显示为HTML表行。

我只需要将每一行链接到一个页面,让我们调用它\'Entry Details Page\'. 这个想法是,对于HTML表中的每一行,都会有一个链接,当我单击该链接时,它会将我带到另一个页面,该页面会显示关于该行的更多详细信息。

我正在考虑使用如上所述的add\\u submenu\\u页面here, 但老实说,我不知道如何使用它以及如何将其包含在代码中。我尝试过这样的方法,但我认为它是错误的:

function myplugin_admin_page {
    // Code to display the admin page for my plugin (both php and html code)
    // This includes the following seudo code (in php)
    foreach ($results_from_db as $result) {
        // CODE TO DISPLAY RESULTS IN AN HTML TABLE *** I NEED HELP HERE ***

        // The following line of code is incorrect, but to show you the idea
        echo \'<a href="\' . add_submenu_page(NULL,\'Entry Details Page\',\'Entry Details Page\',\'manage_options\',\'details-page\', \'myplugin_details_page\'); . \'">View</a>\';

    }
}

myplugin_details_page () {
    // Code to display the details page
}
现在,我面临的两个问题是:

如何正确添加详细信息页面(很明显,我在第二段代码中所做的操作不正确)我想我真的很快就可以解决这个问题了,但是我找不到足够的文档来完成它,所以请帮忙,我真的很感谢你。

干杯

2 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

我不再像以前那样相信我知道你在做什么。

// Add menu and pages to WordPress admin area
add_action(\'admin_menu\', \'myplugin_create_top_level_menu\');

function myplugin_create_top_level_menu() {

    // This is the menu on the side
    add_menu_page(
      \'MyPlugin\', 
      \'MyPlugin\', 
      \'manage_options\', 
      \'myplugin-top-level-page\'
    );

    // This is the first page that is displayed when the menu is clicked
    add_submenu_page(
      \'myplugin-top-level-page\', 
      \'MyPlugin Top Level Page\',
      \'MyPlugin Top Level Page\', 
      \'manage_options\', 
      \'myplugin-top-level-page\', 
      \'myplugin_top_level_page_callback\'
     );

     // This is the hidden page
     add_submenu_page(
      null, 
      \'MyPlugin Details Page\',
      \'MyPlugin Details Page\', 
      \'manage_options\', 
      \'myplugin-details-page\', 
      \'myplugin_details_page_callback\'
     );
}

function myplugin_top_level_page_callback() {

    global $wpdb;
    $results_from_db = $wpdb->get_results("SELECT * FROM myplugin_custom_table");

    foreach ($results_from_db as $result) {

        $id = $result->id;

        $link = add_query_arg(
            array(
                \'page\' => \'myplugin-details-page\', // as defined in the hidden page
                \'id\' => $id
            ),
            admin_url(\'admin.php\')
        );

        echo \'<ul>\';
        echo \'<li><a href="\'.$link.\'">\'.$id.\'</a><li>\';
        echo \'</ul>\';
    }
}

function myplugin_details_page_callback () {
    // This function is to display the hidden page (html and php)
}
您在其中使用了两个额外的核心函数,请参考:

SO网友:Mayur Chauhan

最好在URL中添加另一个参数,并将其称为“action”,并基于action为不同的操作呈现不同的模板。

优点:它将保持菜单打开(激活)。在上述解决方案中,它不会为隐藏菜单保持菜单打开状态,因为我们从技术上删除了子菜单的父菜单。

结束

相关推荐

在WP-admin内的帖子页面中获取帖子ID

我想在帖子页面中获取帖子ID。我需要这个自定义元框,这样我就可以在短代码中设置id。我可以在通知中显示结果,但不知道如何使其全局化以用于元输入。到目前为止,我得到的是:function foo(){ global $post; $nid = $post->ID; var_dump($nid); } add_action( \'admin_notices\', \'foo\' ); 显示id,但我需要它作为变量,以便以后使用。所以我试着$nid glo