Make WordPress Core

Changeset 55444


Ignore:
Timestamp:
03/01/2023 03:37:06 PM (22 months ago)
Author:
SergeyBiryukov
Message:

Users: Use a separate variable for the post counts query in wp_list_authors().

This avoids a collision if wp_list_authors() is called with the optioncount parameter enabled, and the resulting array for the post counts query contains a key that matches the ID of a user who does not have any posts.

Follow-up to [54262].

Props peterwilsoncc, johnbillion, lifeboat, brookedot, thedaysse, Toru.
Fixes #57011.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/author-template.php

    r55398 r55444  
    482482
    483483    if ( ! is_array( $post_counts ) ) {
    484         $post_counts = $wpdb->get_results(
     484        $post_counts       = array();
     485        $post_counts_query = $wpdb->get_results(
    485486            "SELECT DISTINCT post_author, COUNT(ID) AS count
    486487            FROM $wpdb->posts
     
    489490        );
    490491
    491         foreach ( (array) $post_counts as $row ) {
     492        foreach ( (array) $post_counts_query as $row ) {
    492493            $post_counts[ $row->post_author ] = $row->count;
    493494        }
  • trunk/tests/phpunit/tests/user/wpListAuthors.php

    r53488 r55444  
    147147    }
    148148
     149    /**
     150     * Ensures the 'optioncount' parameter does not throw an error when there are authors without posts.
     151     *
     152     * @ticket 57011
     153     */
     154    public function test_wp_list_authors_optioncount_should_not_error_for_empty_authors() {
     155        /*
     156         * The main purpose of this test is to ensure that the error below is not thrown:
     157         *
     158         * Error: Object of class stdClass could not be converted to string
     159         *
     160         * In place of direct testing we ensure `wp_list_authors()` returns a list of authors
     161         * at least one of which is empty.
     162         */
     163        $actual = wp_list_authors(
     164            array(
     165                'optioncount'   => true,
     166                'hide_empty'    => false,
     167                'exclude_admin' => false,
     168                'echo'          => false,
     169            )
     170        );
     171        $this->assertStringContainsString( '(0)', $actual );
     172    }
     173
    149174    public function test_wp_list_authors_exclude_admin() {
    150175        self::factory()->post->create(
Note: See TracChangeset for help on using the changeset viewer.