How to Create a Post Counter in WordPress using Shortcodes

In this tutorial, we will learn how to create a post counter in WordPress using shortcodes. Shortcodes allow us to easily add dynamic functionality to our WordPress website without the need for plugins. We will be creating a shortcode that counts the number of published posts based on specific criteria, such as post type, category, taxonomy, and term. By following this tutorial, you will be able to implement a post counter on your website and display the count of published posts in a flexible and customizable way.

Before proceeding with any customizations in WordPress, it’s essential to set up a child theme. A child theme acts as a safe and efficient way to make modifications without affecting the parent theme. If you haven’t set up a child theme yet, follow this tutorial on How to Create a Child Theme for Customization. It will guide you through the process and ensure that your customizations remain intact even after theme updates.

Open your theme’s functions.php file

To begin, open your theme’s functions.php file located within the directory of your active theme. This is where we will define the shortcode function.

Define the shortcode function

Within the functions.php file, add the following code snippet that defines the shortcode function. This function will handle the post counter functionality and allow us to specify attributes such as post type, category, taxonomy, and term.

// Shortcode function to count published posts
function post_counter_shortcode( $atts ) {
	// Extract shortcode attributes
	$atts = shortcode_atts(
		array(
			'post_type' => 'post',
			'category'  => '',
			'taxonomy'  => '',
			'term'      => '',
		),
		$atts
	);

	// Query parameters for post count
	$args = array(
		'post_type'      => $atts['post_type'],
		'post_status'    => 'publish',
		'posts_per_page' => -1, // Retrieve all posts
	);

	// Include category in the query
	if ( ! empty( $atts['category'] ) ) {
		$args['category_name'] = $atts['category'];
	}

	// Include custom taxonomy in the query
	if ( ! empty( $atts['taxonomy'] ) && ! empty( $atts['term'] ) ) {
		$args['tax_query'] = array(
			array(
				'taxonomy' => $atts['taxonomy'],
				'field'    => 'slug',
				'terms'    => $atts['term'],
			),
		);
	}

	// Get posts based on query parameters
	$posts = get_posts( $args );

	// Return the count
	return count( $posts );
}
add_shortcode( 'post_counter', 'post_counter_shortcode' );
Code language: PHP (php)

Code Explanation:

  • The post_counter_shortcode function is responsible for handling the post counter shortcode. It takes the shortcode attributes as input.
  • The shortcode_atts function is used to extract the shortcode attributes and assign default values for post_type, category, taxonomy, and term. This ensures that if any attribute is not provided in the shortcode, it falls back to the default value.
  • The $args array is initialized with the necessary query parameters for retrieving posts. It includes the specified post_type and sets post_status to “publish” to retrieve only published posts. The posts_per_page parameter is set to -1 to retrieve all posts.
  • If a category attribute is provided in the shortcode, the category_name parameter is added to the $args array. This filters the posts to include only those belonging to the specified category.
  • If both taxonomy and term attributes are provided in the shortcode, a tax_query parameter is added to the $args array. This ensures that only posts associated with the specified custom taxonomy and term are retrieved.
  • The get_posts() function is then used to fetch the posts based on the constructed query parameters. The returned posts are stored in the $posts variable.
  • The count() function is used to determine the number of posts in the $posts array, representing the count of published posts that match the specified criteria.
  • Finally, the count is returned as the result of the shortcode, which will be displayed wherever the shortcode is used.

Save the file

Save the functions.php file after adding the shortcode function.

Utilize the shortcode in your posts or pages

Open a post or page in the WordPress admin panel where you want to display the post counter. Inside the content editor, insert the shortcode in the desired location using one of the following formats:

Shortcode Example with Category:

[post_counter category="your_category_slug"]
Code language: PHP (php)

Replace your_category_slug with the slug of the specific category you wish to count the posts for. For instance, to count posts in the “News” category, use:

[post_counter category="news"]
Code language: PHP (php)

Shortcode Example with Taxonomy:

[post_counter taxonomy="your_taxonomy" term="your_term_slug"]
Code language: PHP (php)

Replace your_taxonomy with the slug of your custom taxonomy and your_term_slug with the slug of the specific term within that taxonomy. For instance, if you have a custom taxonomy called “genre” with a term named “mystery,” use:

[post_counter taxonomy="genre" term="mystery"]
Code language: PHP (php)

That’s it! In this tutorial, we covered the process of creating a post counter in WordPress using shortcodes. By following the outlined steps, you can effortlessly add dynamic and informative post counts to your website, tailored to specific categories or taxonomies. We emphasized adhering to WordPress coding standards, providing you with greater control and flexibility over your website’s functionality.

Leave your feedback and help us improve 🐶

We hope you found this article helpful! If you have any questions, feedback, or spot any errors, please let us know in the comments. Your input is valuable and helps us improve. If you liked this article, please consider sharing it with others. And if you really enjoyed it, you can show your support by buying us a cup of coffee ☕️ or donating via PayPal 💰.

More free knowledge, because why not?

Your thoughts matter, leave a reply 💬

Your email address will not be published. Required fields are marked *