Make WordPress Core

Opened 14 months ago

Last modified 5 weeks ago

#23498 new defect (bug)

wp_list_authors ignores 'exclude_admin' arg when admin account has a display_name other then 'admin'

Reported by: raphaabreu Owned by:
Milestone: Awaiting Review Priority: normal
Severity: normal Version: 3.1
Component: Users Keywords:
Focuses: Cc:

Description (last modified by SergeyBiryukov)

Line 293 of author-template.php should be changed from:

if ( $exclude_admin && 'admin' == $author->display_name )


if ( $exclude_admin && 'admin' == $author->user_login )


Attachments (1)

23498.diff (937 bytes) - added by MikeHansenMe 4 months ago.

Download all attachments as: .zip

Change History (11)

comment:1 knutsp14 months ago

  • Cc knut@… added

'admin' should be avoided as user_login anyway. On a single site there is usually a site owner, identified by the user who has the same email as the one who installed it and may be still be the receiver of admin emails for the site.

if ( $exclude_admin && get_option('admin_email') == $author->user_email )

This will exclude one, or sometimes no users. Or just deprecate the whole $exclude_admin thing in favor of something more modern in terms of today's WordPress roles and capabilities.

comment:2 follow-up: SergeyBiryukov14 months ago

  • Description modified (diff)
  • Keywords has-patch removed
  • Version changed from 3.5.1 to 3.1

Related: #9165, #9902

Introduced in [15620], previously user_login field was used for comparison.

The parameter itself was added in [2632]. We should probably deprecate it in favor of exclude (#9902).

Still, fixing it makes sense to me. The description refers to "the 'admin' user that is installed by default":

Codex specifically refers to the login: "Exclude the 'admin' (login is admin) account from the list":

The default username, however, can be manually picked now (#10396).

I guess we have the following options to fix this:

  • 'admin' == $author->user_login.
  • 1 == $author->ID (from #9165).
  • get_option('admin_email') == $author->user_email (from comment:1).
Last edited 4 months ago by SergeyBiryukov (previous) (diff)

comment:3 SergeyBiryukov14 months ago

In 23448:

Fix typo in phpdoc. see #23498.

comment:4 raphaabreu14 months ago

I am fine with deprecating it in favor of exclude.

However, I am updating several old installs, some of them have multiple accounts with the same user e-mail. The third option would create another issue where several authors would not be shown.

Either option 1 or 2 would work perfectly in my humble opinion.

comment:5 jonna11 months ago

Would it be possible for someone to post the code that would allow me to exclude admin, as well as other users (I think this is the correct way to go).

I really need to get this done and this bug has been up for 3 months with no response.

comment:6 SergeyBiryukov4 months ago

#26544 was marked as a duplicate.

comment:7 in reply to: ↑ 2 SergeyBiryukov4 months ago

Replying to SergeyBiryukov:

I guess we have the following options to fix this:

ticket:26544:wp-list-author-number-exclude-admin.diff implements a fourth option: populating $query_args['exclude'] with the list of all administrator IDs.

comment:8 MikeHansenMe4 months ago

  • Cc mdhansen@… added

comment:9 MikeHansenMe4 months ago

I think excluding the admin before/during get users is important because otherwise it breaks the number arg. For example if I request 2 authors and admin is returned as one of them then gets excluded, it only returns 1 author even thought I requested 2. I have been looking at my previous patch and think I need to look at it a bit more but I do think it is a better approach because of the number issue.

Last edited 4 months ago by MikeHansenMe (previous) (diff)

MikeHansenMe4 months ago

comment:10 nacin5 weeks ago

Unit test, from #26538 (also by MikeHansenMe):

	 * @ticket 23498
	function test_wp_list_authors_number() {
		$expected['number'] = '<li><a href="http://example.org/?author=' . $this->users[1] . '" title="Posts by bob">bob</a></li><li><a href="http://example.org/?author=' . $this->users[2] . '" title="Posts by paul">paul</a></li>';
		$this->AssertEquals( $expected['number'], wp_list_authors( array( 'echo' => false, 'number' => 2 ) ) );
Note: See TracTickets for help on using tickets.