[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