# About the Author Widget

> Adds an "About the Author" sidebar widget that shows the current post author's photo, bio and a link to their other posts, and hides itself on other pages.

- Type: PHP
- Runs: Run everywhere
- Category: [Widgets](https://wpide.com/library/category/widgets/)
- Tags: widgets, authors, bio
- Author: WPIDE Team
- Installs: 0
- Updated: 2026-10-28
- Page: https://wpide.com/library/about-the-author-widget/

## Code

```php
if ( ! class_exists( 'WPIDE_About_Author_Widget' ) ) {
    class WPIDE_About_Author_Widget extends WP_Widget {
        public function __construct() {
            parent::__construct( 'wpide_about_author', 'About the Author', array(
                'description'                 => 'The current post author\'s photo, bio and a link to their posts. Shows on single posts only.',
                'customize_selective_refresh' => true,
            ) );
        }

        public function widget( $args, $instance ) {
            if ( ! is_singular( 'post' ) ) {
                return;
            }

            $author_id = (int) get_post_field( 'post_author', get_queried_object_id() );
            $user      = $author_id ? get_userdata( $author_id ) : false;

            if ( ! $user ) {
                return;
            }

            $title = isset( $instance['title'] ) && '' !== $instance['title'] ? $instance['title'] : 'About the Author';
            $title = apply_filters( 'widget_title', $title, $instance, $this->id_base );
            $size  = ! empty( $instance['size'] ) ? absint( $instance['size'] ) : 80;
            $bio   = get_the_author_meta( 'description', $author_id );

            echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput -- theme markup.

            if ( '' !== (string) $title ) {
                echo $args['before_title'] . esc_html( $title ) . $args['after_title']; // phpcs:ignore WordPress.Security.EscapeOutput
            }

            echo '<div class="wpide-about-author" style="text-align:center;">';
            echo get_avatar( $author_id, $size, '', '', array( 'class' => 'wpide-about-author__avatar', 'extra_attr' => 'style="border-radius:50%;margin:0 auto .5em;display:block;"' ) );
            echo '<p style="margin:0 0 .5em;"><strong>' . esc_html( $user->display_name ) . '</strong></p>';

            if ( '' !== $bio ) {
                echo '<p style="margin:0 0 .5em;">' . wp_kses_post( $bio ) . '</p>';
            }

            echo '<p style="margin:0;"><a href="' . esc_url( get_author_posts_url( $author_id ) ) . '">' . esc_html( sprintf( 'More by %s', $user->display_name ) ) . '</a></p>';
            echo '</div>';
            echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput
        }

        public function form( $instance ) {
            $title = isset( $instance['title'] ) ? $instance['title'] : '';
            $size  = ! empty( $instance['size'] ) ? absint( $instance['size'] ) : 80;

            echo '<p><label for="' . esc_attr( $this->get_field_id( 'title' ) ) . '">Title:</label><input class="widefat" type="text" id="' . esc_attr( $this->get_field_id( 'title' ) ) . '" name="' . esc_attr( $this->get_field_name( 'title' ) ) . '" value="' . esc_attr( $title ) . '" /></p>';
            echo '<p><label for="' . esc_attr( $this->get_field_id( 'size' ) ) . '">Photo size (px):</label> <input class="tiny-text" type="number" min="32" max="256" id="' . esc_attr( $this->get_field_id( 'size' ) ) . '" name="' . esc_attr( $this->get_field_name( 'size' ) ) . '" value="' . esc_attr( $size ) . '" /></p>';

            return '';
        }

        public function update( $new_instance, $old_instance ) {
            return array(
                'title' => isset( $new_instance['title'] ) ? sanitize_text_field( $new_instance['title'] ) : '',
                'size'  => isset( $new_instance['size'] ) ? max( 32, min( 256, absint( $new_instance['size'] ) ) ) : 80,
            );
        }
    }
}

add_action( 'widgets_init', function () {
    register_widget( 'WPIDE_About_Author_Widget' );
} );
```

## Notes

The bio comes from Users > Profile > Biographical Info; the photo is the author's Gravatar or avatar.

## How to use it

Install the free WPIDE plugin (https://wordpress.org/plugins/wpide/), find "About the Author Widget" in its snippet library and add it in one click; or create a new PHP snippet in WPIDE (or any code snippets plugin) and paste the code above. More snippets: https://wpide.com/library/
