How to get the result of comments_number() as a string instead of printing it out?

comments_number() is quite useful: It takes the result of get_comments_number() and prepares the output with some localization magic. Unfortunately, it prints the result out when it is done, it doesn’t offer an option to just return the string.

How can I get the string without printing it? I want to use it as a variable value.

Related posts

Leave a Reply

2 comments

  1. Since WordPress 4.0, you can use the function get_comments_number_text(). See ticket #10177.


    Old answer

    Create a wrapper function: filter the result of comments_number(), store it in your wrapper, and return an empty string to the native function. return the real string in your wrapper function.

    /**
     * Wrapper for native comments_number().
     *
     * This has two functions:
     * 1. It is can be called from a theme or plugin to get the comments number
     *    string *returned* for a variable.
     * 2. It sets itself as a temorary filter to catch the string. The filter will
     *    be removed immediately afterwards.
     *
     * @wp-hook comments_number
     * @param   string $zero Template for no comments OR the parsed string
     *                       when used as filter.
     * @param   string $one
     * @param   string $more
     * @return  string
     */
    function t5_get_comments_number( $zero = FALSE, $one = FALSE, $more = FALSE )
    {
        static $output = '';
    
        if ( 'comments_number' === current_filter() )
        {
            remove_filter( current_filter(), __FUNCTION__ );
            $output = $zero;
            return '';
        }
        else
        {
            add_filter( 'comments_number', __FUNCTION__ );
            comments_number();
            return $output;
        }
    }
    

    Usage:

    $comm_num = t5_get_comments_number();
    print "We found $comm_num.";
    
    // Prints for example: We found 51 Comments.