Eigenes Wordpress Widget bauen

Das ist ein Dummy-Code der zeigt wie man an eigenes Widget registriert. Mit Backend-Eingaben, Speichern und Frontend-Ausgabe

<?php
 
function dummy_load_widget() {
    register_widget( 'dummy_banner_atlas_widget' );
}
add_action( 'widgets_init', 'dummy_load_widget' );
 
 
class dummy_banner_atlas_widget extends WP_Widget {
 
	function __construct() {
		parent::__construct(
 
		// WIDGET-ID
		'dummy_banner_atlas_widget',
 
		// WIDGET NAME
		'dummyBanner',
 
		// WIDGET BESCHREIBUNG
		array( 'description' => 'Ein Bannter als Dummy', )
		);
	}
 
	/*
		FRONTEND
	 */
	public function widget( $args, $instance ) {
		$title_bold    = ( isset( $instance[ 'title_bold' ]    ) ) ? $instance[ 'title_bold' ]    : '';
		$title_light   = ( isset( $instance[ 'title_light' ]   ) ) ? $instance[ 'title_light' ]   : '';
		$button_label  = ( isset( $instance[ 'button_label' ]  ) ) ? $instance[ 'button_label' ]  : '';
		$button_target = ( isset( $instance[ 'button_target' ] ) ) ? $instance[ 'button_target' ] : '';
 
		$logo_url      = get_stylesheet_directory_uri() . '/gfx/banner/banner_01_dummy_logo.png';
		$visual_url    = get_stylesheet_directory_uri() . '/gfx/banner/banner_01_dummy_visual.png';
 
		// before and after widget arguments are defined by themes
		echo $args['before_widget'];
		echo "
			<style>
				.widget_avtest_banner_atlas_widget {
					background : linear-gradient(0deg, rgba(177,202,213,1) 0%, rgba(255,255,255,1) 100%);
				}
				.widget_avtest_banner_atlas_widget .inner-wrapper {
					padding             : 10px 20px 20px 20px;
					background-image    : url($visual_url);
					background-position : bottom right;
					background-size     : 170px 188px;
					background-repeat   : no-repeat;
				}
 
 
				.banner-title {
					padding     : 5px 0px 100px 0px;
					font-family : 'Interstate',Arial,Helvetica,sans-serif;
					font-size   : 22px;
					color       : rgb(206, 4, 0);
				}
				.banner-title__bold {
					font-weight : 600;
				}
				.banner-title__light {
					font-family : 'InterstateLight',Arial,Helvetica,sans-serif;
					font-weight : 200;
				}
 
				.banner-logo {}
				.banner-logo__image {
					width : 165px;
				}
			</style>
			<div class=\"inner-wrapper\">
				<a href=\"$button_target\" class=\"banner-logo\">
					<img src=\"$logo_url\" class=\"banner-logo__image\"/>
				</a>
				<p class=\"banner-title\">
					<span class=\"banner-title__bold\">$title_bold</span><br/>
					<span class=\"banner-title__light\">$title_light</span>
				</p>
 
				<a href=\"$button_target\" class=\"po-button\">
					$button_label
				</a>
			</div>
		";
		echo $args['after_widget'];
	}
 
	/*
		BACKEND
	 */
	public function form( $instance ) {
		$title_bold    = ( isset( $instance[ 'title_bold' ]    ) ) ? $instance[ 'title_bold' ]    : '';
		$title_light   = ( isset( $instance[ 'title_light' ]   ) ) ? $instance[ 'title_light' ]   : '';
		$button_label  = ( isset( $instance[ 'button_label' ]  ) ) ? $instance[ 'button_label' ]  : '';
		$button_target = ( isset( $instance[ 'button_target' ] ) ) ? $instance[ 'button_target' ] : '';
 
		?>
		<p>
			<label for="<?php echo $this->get_field_id( 'title_bold' ); ?>">Titel (Bold & Light)</label>
			<input class="widefat" placeholder="Erste Zeile in Bold"   id="<?php echo $this->get_field_id( 'title_bold' ); ?>"  name="<?php echo $this->get_field_name( 'title_bold' ); ?>" type="text" value="<?php echo esc_attr( $title_bold ); ?>" />
			<input class="widefat" placeholder="Zweite Zeile in Light" id="<?php echo $this->get_field_id( 'title_light' ); ?>" name="<?php echo $this->get_field_name( 'title_light' ); ?>" type="text" value="<?php echo esc_attr( $title_light ); ?>" />
 
			<br /><br />
 
			<label for="<?php echo $this->get_field_id( 'button_label' ); ?>">Button Label</label>
			<input class="widefat" placeholder="Mehr ยป"   id="<?php echo $this->get_field_id( 'button_label' ); ?>"  name="<?php echo $this->get_field_name( 'button_label' ); ?>" type="text" value="<?php echo esc_attr( $button_label ); ?>" />
 
			<br /><br />
 
			<label for="<?php echo $this->get_field_id( 'button_target' ); ?>">Button Target</label>
			<input class="widefat" placeholder="https://www.domain.de"   id="<?php echo $this->get_field_id( 'button_target' ); ?>"  name="<?php echo $this->get_field_name( 'button_target' ); ?>" type="text" value="<?php echo esc_attr( $button_target ); ?>" />
 
		</p>
		<?php
	}
 
	/*
		UPDATING / SAVING
	 */
	public function update( $new_instance, $old_instance ) {
		$instance = array();
		$instance['title_bold']    = ( ! empty( $new_instance['title_bold']    ) ) ? strip_tags( $new_instance['title_bold']    ) : '';
		$instance['title_light']   = ( ! empty( $new_instance['title_light']   ) ) ? strip_tags( $new_instance['title_light']   ) : '';
		$instance['button_label']  = ( ! empty( $new_instance['button_label']  ) ) ? strip_tags( $new_instance['button_label']  ) : '';
		$instance['button_target'] = ( ! empty( $new_instance['button_target'] ) ) ? strip_tags( $new_instance['button_target'] ) : '';
 
		return $instance;
	}
}