_update_term_count_on_transition_post_status( string $new_status, string $old_status, WP_Post $post )

This function’s access is marked private. This means it is not intended for use by plugin or theme developers, only by core. It is listed here for completeness.

Updates the custom taxonomies’ term counts when a post’s status is changed.

Description

For example, default posts term counts (for custom taxonomies) don’t include private / draft posts.

Parameters

$new_statusstringrequired
New post status.
$old_statusstringrequired
Old post status.
$postWP_Postrequired
Post object.

Source

function _update_term_count_on_transition_post_status( $new_status, $old_status, $post ) {
	if ( $new_status === $old_status ) {
		return;
	}

	// Update counts for the post's terms.
	foreach ( (array) get_object_taxonomies( $post->post_type, 'objects' ) as $taxonomy ) {
		/** This filter is documented in wp-includes/taxonomy.php */
		$counted_statuses = apply_filters( 'update_post_term_count_statuses', array( 'publish' ), $taxonomy );

		/*
		 * Do not recalculate term count if both the old and new status are not included in term counts.
		 * This accounts for a transition such as draft -> pending.
		 */
		if ( ! in_array( $old_status, $counted_statuses, true ) && ! in_array( $new_status, $counted_statuses, true ) ) {
			continue;
		}

		/*
		 * Do not recalculate term count if both the old and new status are included in term counts.
		 *
		 * This accounts for transitioning between statuses which are both included in term counts. This can only occur
		 * if the `update_post_term_count_statuses` filter is in use to count more than just the 'publish' status.
		 */
		if ( in_array( $old_status, $counted_statuses, true ) && in_array( $new_status, $counted_statuses, true ) ) {
			continue;
		}

		$tt_ids = wp_get_object_terms( $post->ID, $taxonomy->name, array( 'fields' => 'tt_ids' ) );
		wp_update_term_count( $tt_ids, $taxonomy->name );
	}
}

Hooks

apply_filters( ‘update_post_term_count_statuses’, string[] $post_statuses, WP_Taxonomy $taxonomy )

Filters the post statuses for updating the term count.

Changelog

VersionDescription
3.3.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.