17

I'm trying to count the number of total posts of a custom post type "jobs". My query just returns "0" when I know there are posts. I don't think it is checking that the post type has posts, but I'm clueless as to why... any ideas?

<?php $jobs = new WP_Query(array( 'post_type' => 'jobs' ));?>
<?php if ($jobs->have_posts()) { 

    $count_posts = wp_count_posts()->publish; 
    if ( $count_posts == "1" ) { 
        echo "<h2>There is currently one vacancy...</h2>"; }
    else { echo "<h2>There are currently  $count_posts vacancies...</h2>"; }

} else { ?>
<h2>There are currently no vacancies.</h2>
<?php } ?>
2
  • As a side note, did you try count($jobs) or print_r($jobs) just to see the original results of the query? Commented Aug 22, 2011 at 12:35
  • no, just tried and it doesn't o anything useful.
    – Dan Lee
    Commented Aug 22, 2011 at 12:51

3 Answers 3

57

The wp_count_posts function has parameter $type for post type to count, you should use this parameter if you want to get number of jobs

like so:

$count_posts = wp_count_posts( 'jobs' )->publish;
0
0

Replace these with your meta_key and meta_value:

$meta_key = 'x';
$meta_value = '2';

$sql = "SELECT count(DISTINCT pm.post_id)
FROM $wpdb->postmeta pm
JOIN $wpdb->posts p ON (p.ID = pm.post_id)
WHERE pm.meta_key = '$meta_key'
AND pm.meta_value = '$meta_value'
AND p.post_type = 'post'
AND p.post_status = 'publish'
";

$count = $wpdb->get_var($sql);
echo "<p>Count is: $count</p>";
2
  • 2
    It is a very bad practive to use plain sql in your code. There are a lot of WP wrapper functions that do the same thing and even more.
    – NoSense
    Commented Oct 5, 2014 at 14:15
  • @NoSense apart from the built-in wrapper functions are really really slow as they return loads of meta data none asked for. Using SQL is a really efficient way to fetch specific data that you require.
    – Sam
    Commented May 31, 2020 at 17:49
0

Another way, using WP-CLI:

wp eval 'echo wp_count_posts( "post" )->publish;'; echo
2
  • this doesn't solve the issue here. Also your example is wrong too! Commented Jul 8, 2020 at 11:11
  • Can this be used for posts and products at the same time? Commented Sep 14, 2023 at 16:30

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.