Skip to content

Instantly share code, notes, and snippets.

@ariona
Last active April 23, 2024 07:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ariona/a5feabe3278450b5b3bd to your computer and use it in GitHub Desktop.
Save ariona/a5feabe3278450b5b3bd to your computer and use it in GitHub Desktop.
Add Custom Options for Widgets

##Add Custom Options for WordPress Widgets This snippet will add some option to all registered widget in wordpress.

<?php
// Add New Options for All Registered widgets
function add_widget_visibility_options( $widget, $return, $instance ) {
$visible_desktop = isset( $instance['visible_desktop'] ) ? $instance['visible_desktop'] : 'on';
$visible_mobile = isset( $instance['visible_mobile'] ) ? $instance['visible_mobile'] : 'on';
?>
<hr>
<strong>Widget Visibility</strong>
<p>
<input class="checkbox" type="checkbox" id="<?php echo $widget->get_field_id('visible_desktop'); ?>" name="<?php echo $widget->get_field_name('visible_desktop'); ?>" <?php echo (!empty($visible_desktop)) ? "checked":""; ?> />
<label for="<?php echo $widget->get_field_id('visible_desktop'); ?>">Visible Desktop</label>
</p>
<p>
<input class="checkbox" type="checkbox" id="<?php echo $widget->get_field_id('visible_mobile'); ?>" name="<?php echo $widget->get_field_name('visible_mobile'); ?>" <?php echo (!empty($visible_mobile)) ? "checked":""; ?> />
<label for="<?php echo $widget->get_field_id('visible_mobile'); ?>">Visible Mobile</label>
</p>
<?php
}
add_filter('in_widget_form', 'add_widget_visibility_options', 10, 3 );
// Add Save handle for the options
function save_widget_visibility_options( $instance, $new_instance ) {
$new_instance['visible_desktop'] = ( !empty( $new_instance['visible_desktop'] ) ) ? $new_instance['visible_desktop']: '';
$new_instance['visible_mobile'] = ( !empty( $new_instance['visible_mobile'] ) ) ? $new_instance['visible_mobile']: '';
return $new_instance;
}
add_filter( 'widget_update_callback', 'save_widget_visibility_options', 10, 2 );
// In this case, it's add new classes to before_widget arg
function add_widget_visibility_classes( $params ) {
global $wp_registered_widgets;
$widget_id = $params[0]['widget_id'];
$widget_obj = $wp_registered_widgets[$widget_id];
$widget_opt = get_option($widget_obj['callback'][0]->option_name);
$widget_num = $widget_obj['params'][0]['number'];
$visibility = array(
"visibility",
(isset($widget_opt[$widget_num]['visible_desktop']) && !empty($widget_opt[$widget_num]['visible_desktop']) ) ? "visible-desktop":"",
(isset($widget_opt[$widget_num]['visible_mobile']) && !empty($widget_opt[$widget_num]['visible_mobile'])) ? "visible-mobile":"",
);
$params[0]['before_widget'] = preg_replace(
'/class="/',
sprintf( 'class="%s ', implode(" ",$visibility) ),
$params[0]['before_widget'],
1
);
return $params;
}
add_filter( 'dynamic_sidebar_params', 'add_widget_visibility_classes' );
@Yashpatel19070
Copy link

Great

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment