Bestehende WordPress-Widgets duch eigene Optionen erweitern

s03 1526
fotografiert von Gabriele Lässer

Konkreter Anlass war die Platzierung von Ads in Widgets eines Blogs, verbunden mit dem Erfordernis, diese DSGVO-gerecht zu machen, und erst nach dem Cookie Consent einzublenden. Doch auch beliebige andere Einstellungen die Einfluss auf den Output in bestehenden Widgets haben, sind mit Hilfe von drei Filtern und etwas Code anzuwenden.

Damit ist alles möglich – von der Gestaltung über das Ausblenden des Widget-Titels (ohne auf eine schlüssige Benennung im Dashboard verzichten zu müssen) bis hin zur Zeitsteuerung.

Das Beispiel behandelt der Übersicht halber nur eine Checkbox zum Ausblenden des Widget-Titels im Frontend

Das Formular

add_filter( 'in_widget_form', function ( $widget, $return, $instance ) {
	<p>
		<input type="checkbox" class="checkbox" name="<?php echo $widget->get_field_name('hide_title'); ?>" id="<?php echo $widget->get_field_name('hide_title'); ?>" <?php checked(isset($instance['hide_title']) ? $instance['hide_title'] : 0); ?> />
		<label for="<?php echo $widget->get_field_name('hide_title'); ?>"><?php echo __('Hide Widgettitle' ); ?></label>
	</p>			
<?php

}, 10, 3 );

Das Speichern

add_filter( 'widget_update_callback', function ( $instance, $new_instance ) {
	if ( !empty( $new_instance['hide_title'] ) ) {
		$instance['hide_title'] = 1;
	} else {
		unset( $instance['hide_title'] );
	}
    return $instance;
}, 10, 2 );

Die Wiedergabe

add_filter('widget_display_callback', function($instance, $widget, $args) {
	if ( !empty( $instance['hide_title'] ) ) {
		unset( $instance['title'] );
	}
	return $instance;
}, 10, 3);

Da es ja ursprünglich um DSGVO ging (im Zusammenspiel mit Borlabs Cookie), hier auch dieses Beispiel. Die Einstellung sollte nur für HTML-Widgets gelten. Im Textfeld wird der Name des Cookies eingegeben, dem zugestimmt werden muss. Ist das erfolgt, wird das Widget angezeigt, andernfalls nicht.


/**
 * Plugin Name: Cookie Consent Widgets Option
 */
if ( !class_exists('BorlabsCookie\Autoloader') ) return;

add_filter( 'in_widget_form', function ( $widget, $return, $instance ) {
	if ( 'custom_html' == $widget->id_base ) {
        $cookieId = isset( $instance['cookie_id'] ) ? $instance['cookie_id'] : '';
        ?>
            <p>
			<label for="<?php echo $widget->get_field_id('cookie_id'); ?>">
                    <?php _e( 'Cookie Consent' ); ?>
                </label>
                <input class="text" type="text" id="<?php esc_attr_e($widget->get_field_id('cookie_id')); ?>" name="<?php esc_attr_e($widget->get_field_name('cookie_id')); ?>" value="<?php echo esc_attr($cookieId) ?>" />

            </p>
	<?php }  
}, 10, 3 );


add_filter( 'widget_update_callback', function ( $instance, $new_instance ) {
    if ( !empty( $new_instance['cookie_id'] ) ) {
	$instance['cookie_id'] = $new_instance['cookie_id'];
    }
    return $instance;
}, 10, 2 );


add_filter('widget_display_callback', function($instance, $widget, $args) {
	if ( !empty( $instance['cookie_id'] ) ) {
		$cookieId = $instance['cookie_id'];
		if ( ! BorlabsCookieHelper()->gaveConsent( $cookieId ) ) return false; 
	}
	return $instance;
}, 10, 3);

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden. Die Angabe einer E-Mail-Adresse und eines Namens ist nicht erforderlich. Einen (Spitz)-Namen zu nennen wäre aber doch nett.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Hinweis: Sowohl angegebener Name als auch E-Mail-Adresse (beides ist optional, dafür werden alle Kommentare vor Veröffentlichung geprüft) werden dauerhaft gespeichert. Du kannst jeder Zeit die Löschung Deiner Daten oder / und Kommentare einfordern, direkt über dieses Formular (wird nicht veröffentlicht, und im Anschluss gelöscht), und ich werde das umgehend erledigen. – Mit hinterlassenen Kommentaren hinterlegte IP-Adressen werden nach zwei Monaten automatisch gelöscht

publicly queryable