[wp-hackers] Page Title for Admin Menu

Alan J Castonguay alan at verselogic.net
Fri Feb 13 21:53:11 GMT 2009


Nice sleuthing, Chris!

-Alan

On 13-Feb-09, at 4:36 PM, Chris Jean wrote:

> I don't believe that it's a bug; rather, I think that this is just  
> a complex issue. Let me explain.
>
> I dug through 1.5 - 2.7.1 and found that all of those versions have  
> the page title parameter for top-level menu items. I also found  
> that none of those versions actually define the page title for any  
> of the menus built into core (they just use a blank string: '').
>
> However, I have found that all of the versions actually do refer to  
> the page title in the $menu data structure. You can find references  
> to page title by searching for "$menu_array[3]" in the wp-admin/ 
> includes/plugin.php file (wp-admin/admin-functions.php file in  
> versions before 2.3).
>
> I traced the logic and found that its possible use comes down to  
> the code found in the get_admin_page_title and  
> get_admin_page_parent functions. Basically, if a parent can't be  
> found (returned from get_admin_page_parent), there is the  
> possibility that get_admin_page_title will use the top-level menu  
> item's page title. However, when I looked through  
> get_admin_page_parent, I can't think of any possible scenario where  
> a parent wouldn't be found.
>
> Looking farther back to version 1.2.2 (the only publicly available  
> version I could find pre-1.5), I see that there is a single-level  
> menu that doesn't support page titles. This combined with the fact  
> that 1.5 has two-level menus and more-or-less unused top-level menu  
> page titles, I believe that I know why they are there.
>
> I believe somewhere in 1.3 or 1.4 development, page titles were  
> added to the menus. Then sometime before 1.5, second level menus  
> were added which had their own page titles. These new page titles  
> superseded the old page titles, but the top-level-menu page titles  
> remained for backwards compatibility.
>
> Here's where the story gets weird.
>
> From all the code I've looked through, the presence of a page title  
> parameter for a top-level menu is nothing more than vestigial. Even  
> in the earliest publicly available builds of WP where the parameter  
> exists, the core doesn't make any use of the parameter and simply  
> shuffles past its existence by filling in the field with empty  
> strings.
>
> Based on this, I would assume that there aren't any top-level menus  
> that are devoid of sub-menu items and that the top-level menu items  
> serve as nothing more than simple containers for the sub-menu  
> items. And I would be wrong.
>
> Just look at a new install of WordPress, and you will see a  
> standalone top-level menu: Dashboard. In a standard install,  
> Dashboard doesn't have any sub-menu items. When I realized this, I  
> looked at the code and found that there weren't any entries in  
> $submenu to create the Dashboard sub-menu entry that appears if  
> plugins, such as Akismet, adds a sub-menu to the Dashboard top- 
> level menu.
>
> This confused me at first, but I looked at the add_submenu_page  
> code and found that it generates the first $submenu entry  
> automatically when a sub-menu page is added to a menu entry that  
> doesn't have any sub-menu pages.
>
> Even though the Dashboard menu entry doesn't have any sub-menu  
> entries by default, it still does not make use of the page title  
> parameter. Instead, it does something hackish (IMHO), it has to  
> manually set the $title variable before get_admin_page_title is  
> called. The get_admin_page_title will immediately return the value  
> of the $title variable if it is not empty.
>
> After seeing this, I cooked up the following quick plugin:
>
>    <?php
>
>    /*
>    Plugin Name: Menu Test
>    */
>
>    add_action( 'admin_menu', menu_test_add_pages );
>
>    function menu_test_add_pages() {
>        $page_ref = add_menu_page( '', 'Menu Test', 10, 'menu-test',
>    'menu_test_index' );
>              add_action( 'load-' . $page_ref, 'menu_test_set_title' );
>    }
>
>    function menu_test_index() {
>        echo "<h3>Menu Test</h3>";
>    }
>
>    function menu_test_set_title() {
>        global $title;
>        $title = 'Menu Test';
>    }
>
>    ?>
>
> All this plugin does is register a menu entry that doesn't have any  
> sub-menu entries and give the resulting page a title. This is more  
> or less the same way that Dashboard has set the title since 1.5.
>
> Sorry for the long reply. It was fun digging into this. I hope that  
> my reply helps you out.
>
> Chris Jean
> http://gaarai.com/
> http://wp-roadmap.com/
> http://dnsyogi.com/
>
>
>
> Chris Williams wrote:
>> Exactly, so is that a bug?  Is it impossible/illegal to have a  
>> plug-in with
>> only a top level menu?
>>
>>
>>
>>> From: Gaarai <gaarai at gaarai.com>
>>> Reply-To: <wp-hackers at lists.automattic.com>
>>> Date: Thu, 12 Feb 2009 21:21:02 -0600
>>> To: <wp-hackers at lists.automattic.com>
>>> Subject: Re: [wp-hackers] Page Title for Admin Menu
>>>
>>> In my experience, it isn't the top-level menu that sets the title;
>>> rather, the first sub-menu under it does.
>>>
>>> Chris Jean
>>> http://gaarai.com/
>>> http://wp-roadmap.com/
>>>
>>>
>>>
>>> Chris Williams wrote:
>>>
>>>> Despite my overabundant use of the word "really" (which I  
>>>> "really" regret
>>>> now :) ), does anybody have any input on this issue?
>>>>
>>>>
>>>>
>>>>> From: Chris Williams <chris at clwill.com>
>>>>> Reply-To: <wp-hackers at lists.automattic.com>
>>>>> Date: Wed, 11 Feb 2009 13:27:16 -0800
>>>>> To: <wp-hackers at lists.automattic.com>
>>>>> Subject: [wp-hackers] Page Title for Admin Menu
>>>>>
>>>>> I am writing a plugin that adds an admin menu page (not  
>>>>> submenu).  It does
>>>>> this because it¹s really quite a separate thing < a calendar of  
>>>>> racing
>>>>> events, nothing to do with the WP functions, it¹s really a  
>>>>> separate data
>>>>> table and everything.  So, it doesn¹t really belong down in  
>>>>> ³settings², or
>>>>> ³tools².
>>>>>
>>>>> This is all good, I have it working with add_menu_page and all  
>>>>> is fine.  It
>>>>> really only needs one page (like the ³Links² or ³Comments² menu  
>>>>> items), it¹s
>>>>> just an ³edit events² page.  There is one small problem, and  
>>>>> that¹s that the
>>>>> HTML page title is null.  It says simply ³[blogname] > --  
>>>>> Wordpress².
>>>>> Nothing I put in the $page_title parameter on add_menu_page works.
>>>>>
>>>>> If I have a submenu page, it works, but not with just a plain  
>>>>> add_menu_page.
>>>>> I believe the issue is in get_admin_page_title in
>>>>> wp-admin/includes/plugin.php, but I haven¹t debugged it  
>>>>> completely.
>>>>>
>>>>> My questions are: 1) am I doing something incorrectly that is  
>>>>> causing this,
>>>>> 2) is this a known issue and I should just chill, or 3) should  
>>>>> I figure it
>>>>> out and propose a patch?
>>>>>
>>>>> Thanks,
>>>>> Chris
>>>>> _______________________________________________
>>>>> wp-hackers mailing list
>>>>> wp-hackers at lists.automattic.com
>>>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>>>>
>>>> _______________________________________________
>>>> wp-hackers mailing list
>>>> wp-hackers at lists.automattic.com
>>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>>>
>>>>
>>> _______________________________________________
>>> wp-hackers mailing list
>>> wp-hackers at lists.automattic.com
>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>>
>>
>> _______________________________________________
>> wp-hackers mailing list
>> wp-hackers at lists.automattic.com
>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>
>>
> _______________________________________________
> wp-hackers mailing list
> wp-hackers at lists.automattic.com
> http://lists.automattic.com/mailman/listinfo/wp-hackers



More information about the wp-hackers mailing list