WP_Posts_List_Table::formats_dropdown()protectedWP 5.2.0

Displays a formats drop-down for filtering items.

Method of the class: WP_Posts_List_Table{}

Hooks from the method

Return

null. Nothing (null).

Usage

// protected - for code of main (parent) or child class
$result = $this->formats_dropdown( $post_type );
$post_type(string) (required)
Post type slug.

Changelog

Since 5.2.0 Introduced.

WP_Posts_List_Table::formats_dropdown() code WP 6.6.2

<?php
protected function formats_dropdown( $post_type ) {
	/**
	 * Filters whether to remove the 'Formats' drop-down from the post list table.
	 *
	 * @since 5.2.0
	 * @since 5.5.0 The `$post_type` parameter was added.
	 *
	 * @param bool   $disable   Whether to disable the drop-down. Default false.
	 * @param string $post_type Post type slug.
	 */
	if ( apply_filters( 'disable_formats_dropdown', false, $post_type ) ) {
		return;
	}

	// Return if the post type doesn't have post formats or if we're in the Trash.
	if ( ! is_object_in_taxonomy( $post_type, 'post_format' ) || $this->is_trash ) {
		return;
	}

	// Make sure the dropdown shows only formats with a post count greater than 0.
	$used_post_formats = get_terms(
		array(
			'taxonomy'   => 'post_format',
			'hide_empty' => true,
		)
	);

	// Return if there are no posts using formats.
	if ( ! $used_post_formats ) {
		return;
	}

	$displayed_post_format = isset( $_GET['post_format'] ) ? $_GET['post_format'] : '';
	?>
	<label for="filter-by-format" class="screen-reader-text">
		<?php
		/* translators: Hidden accessibility text. */
		_e( 'Filter by post format' );
		?>
	</label>
	<select name="post_format" id="filter-by-format">
		<option<?php selected( $displayed_post_format, '' ); ?> value=""><?php _e( 'All formats' ); ?></option>
		<?php
		foreach ( $used_post_formats as $used_post_format ) {
			// Post format slug.
			$slug = str_replace( 'post-format-', '', $used_post_format->slug );
			// Pretty, translated version of the post format slug.
			$pretty_name = get_post_format_string( $slug );

			// Skip the standard post format.
			if ( 'standard' === $slug ) {
				continue;
			}
			?>
			<option<?php selected( $displayed_post_format, $slug ); ?> value="<?php echo esc_attr( $slug ); ?>"><?php echo esc_html( $pretty_name ); ?></option>
			<?php
		}
		?>
	</select>
	<?php
}