Hooks und Filter | PHP | Webentwicklung

Bestehende WordPress-Widgets duch eigene Optionen erweitern

cubes 447703 1920

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 );
Code-Sprache: PHP (php)

Die Wiedergabe

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

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 echo $widget->get_field_id('cookie_id'); ?>" name="<?php echo $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);
Code-Sprache: HTML, XML (xml)

weiter schmökern

Schreibe einen Kommentar

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden.

Deine E-Mail-Adresse wird nicht veröffentlicht.