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);
Schreibe einen Kommentar