21

Until now I have been using below code to get the number of results when someone searches and to display that count.

<?php /* Search Count */ $allsearch =& new WP_Query("s=$s&showposts=-1"); $count = $allsearch->post_count; echo $count . ' '; wp_reset_query(); ?>

But this does not seem like valid code. It shows below error:

Deprecated: Assigning the return value of new by reference is deprecated

Can anyone please suggest the proper way in which I get get the search count. The above code is placed in the heading of my index.php file of theme within a conditional statement to display different heading based on what type of page a user is on.

1
  • allsearch = new WP_Query without '&' to avoid deprecated notice.
    – gmazzap
    Commented Aug 3, 2013 at 16:04

2 Answers 2

43

If you are within the search template i.e Search query is your main query. You should then be able to get search results from global $wp_query without running an additional query.

global $wp_query;
echo $wp_query->found_posts.' results found.';

Edit 1

If you have to get count out of search context. You can combine both techniques to get efficient result. It wont fetch all the post but you can get the search count.

$allsearch = new WP_Query("s=$s&showposts=0"); 
echo $allsearch ->found_posts.' results found.';

Your Error

About the error you are getting, it lies here

$allsearch =& new WP_Query("s=$s&showposts=-1");

Remove the "&" beside the equal sign to get rid of the error. So it will look like this

$allsearch = new WP_Query("s=$s&showposts=-1");
3
  • 1
    Wow thanks. I also tried this and it worked '<?php /* Search Count */ $count = $wp_query->post_count; echo $count . ' '; wp_reset_query(); ?>' Commented Aug 3, 2013 at 16:21
  • Harish your $allsearch = new WP_Query("s=$s&showposts=0"); echo $allsearch ->found_posts.' results found.'; will only display the current page count not the total. For example it will should only 10 if there are 20 posts also. Commented May 28, 2016 at 8:01
  • How come the code worked previously and now it does not work? I have removed the "&" from the next of equal. And, it works again.
    – Jornes
    Commented Apr 11, 2020 at 14:25
4

Might be useful also to share this, so that your first heading notifies the user search results were found and the second, notifies the user how many were found. If it was less than 2 results, it should read '1 result found' else 'x results found'.

    <h2 class="blog_archive_heading">Search Results for '<?php the_search_query(); ?>'</h2>
<h3 class="blog_archive_heading"><?php
  global $wp_query;
  if($wp_query->found_posts < 2) {
    $result = "result";
  } else {
    $result = "results";
  }
    echo $wp_query->found_posts . " " . $result . " found.";
    ?></h3>

This code snippet appears in my search.php so to speak.

section-searchresults.php will simply output the blog posts that were found related to your search, if none were found then it will output 'No results found'.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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