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.

up vote 2 down vote accepted

Easiest way:

ob_start();
comments_number();
$data = ob_get_clean();

$data will contain the text.

  • This was my first idea. I just don’t like ob_start(). But you are right, it should be rather safe in this situation. – fuxia Aug 25 '12 at 19:49
  • Marking this as answer because it is much more readable than my own solution. :) – fuxia Aug 26 '12 at 16:57

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.

Your Answer

 
discard

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.