Using WordPress ‘in_widget_form’ PHP action

The in_widget_form WordPress PHP action allows you to add extra fields to a widget’s control form.

Usage

add_action('in_widget_form', 'your_custom_function', 10, 3);
function your_custom_function($widget, $return, $instance) {
    // your custom code here
    return $return;
}

Parameters

  • $widget (WP_Widget): The widget instance (passed by reference).
  • $return (null): Return null if new fields are added.
  • $instance (array): An array of the widget’s settings.

More information

See WordPress Developer Resources: in_widget_form

Examples

Add a custom field to a widget

This code adds a custom text field to the widget form.

add_action('in_widget_form', 'add_custom_field', 10, 3);
function add_custom_field($widget, $return, $instance) {
    $custom_field = isset($instance['custom_field']) ? $instance['custom_field'] : '';
    ?>
    <p>
        <label for="<?php echo $widget->get_field_id('custom_field'); ?>"><?php _e('Custom Field:', 'text_domain'); ?></label>
        <input class="widefat" id="<?php echo $widget->get_field_id('custom_field'); ?>" name="<?php echo $widget->get_field_name('custom_field'); ?>" type="text" value="<?php echo esc_attr($custom_field); ?>">
    </p>
    <?php
    return $return;
}

Add a custom dropdown to a widget

This code adds a custom dropdown with options to the widget form.

add_action('in_widget_form', 'add_custom_dropdown', 10, 3);
function add_custom_dropdown($widget, $return, $instance) {
    $selected_option = isset($instance['selected_option']) ? $instance['selected_option'] : '';
    $options = array('Option 1', 'Option 2', 'Option 3');
    ?>
    <p>
        <label for="<?php echo $widget->get_field_id('selected_option'); ?>"><?php _e('Select Option:', 'text_domain'); ?></label>
        <select class="widefat" id="<?php echo $widget->get_field_id('selected_option'); ?>" name="<?php echo $widget->get_field_name('selected_option'); ?>">
            <?php foreach ($options as $option) : ?>
                <option value="<?php echo esc_attr($option); ?>" <?php selected($selected_option, $option); ?>><?php echo esc_html($option); ?></option>
            <?php endforeach; ?>
        </select>
    </p>
    <?php
    return $return;
}

Add a custom checkbox to a widget

This code adds a custom checkbox to the widget form.

add_action('in_widget_form', 'add_custom_checkbox', 10, 3);
function add_custom_checkbox($widget, $return, $instance) {
    $checked = isset($instance['custom_checkbox']) ? (bool) $instance['custom_checkbox'] : false;
    ?>
    <p>
        <input class="checkbox" id="<?php echo $widget->get_field_id('custom_checkbox'); ?>" name="<?php echo $widget->get_field_name('custom_checkbox'); ?>" type="checkbox" <?php checked($checked); ?>>
        <label for="<?php echo $widget->get_field_id('custom_checkbox'); ?>"><?php _e('Custom Checkbox:', 'text_domain'); ?></label>
    </p>
    <?php
    return $return;
}

Add a custom radio button group to a widget

This code adds a custom radio button group to the widget form.

add_action('in_widget_form', 'add_custom_radio_group', 10, 3);
function add_custom_radio_group($widget, $return, $instance) {
    $selected_radio = isset($instance['selected_radio']) ? $instance['selected_radio'] : '';
    $radio_options = array('Radio 1', 'Radio 2', 'Radio 3');
    ?>
    <p>
        <label><?php _e('Custom Radio Group:', 'text_domain'); ?></label><br>
        <?php foreach ($radio_options as $option) : ?>
            <input type="radio" id="<?php echo $widget->get_field_id('selected_radio') . '_' . esc_attr($option); ?>" name="<?php echo $widget->get_field_name('selected_radio'); ?>" value="<?php echo esc_attr($option); ?>" <?php checked($selected_radio, $option); ?>>
            <label for="<?php echo $widget->get_field_id('selected_radio') . '_' . esc_attr($option); ?>"><?php echo esc_html($option); ?></label><br>
        <?php endforeach; ?>
    </p>
    <?php
    return $return;
}

Add a custom textarea to a widget

This code adds a custom textarea to the widget form.

add_action('in_widget_form', 'add_custom_textarea', 10, 3);
function add_custom_textarea($widget, $return, $instance) {
    $custom_textarea = isset($instance['custom_textarea']) ? $instance['custom_textarea'] : '';
    ?>
    <p>
        <label for="<?php echo $widget->get_field_id('custom_textarea'); ?>"><?php _e('Custom Textarea:', 'text_domain'); ?></label>
<textarea class="widefat" id="<?php echo $widget->get_field_id('custom_textarea'); ?>" name="<?php echo $widget->get_field_name('custom_textarea'); ?>" rows="4" cols="20"><?php echo esc_textarea($custom_textarea); ?></textarea>
</p>
<?php
return $return;
}

Add a custom datepicker field to a widget

This code adds a custom datepicker field to the widget form. It requires the jQuery UI datepicker library to be enqueued.

add_action('in_widget_form', 'add_custom_datepicker', 10, 3);
function add_custom_datepicker($widget, $return, $instance) {
    $selected_date = isset($instance['selected_date']) ? $instance['selected_date'] : '';
    ?>
    <p>
        <label for="<?php echo $widget->get_field_id('selected_date'); ?>"><?php _e('Custom Datepicker:', 'text_domain'); ?></label>
        <input class="widefat custom-datepicker" id="<?php echo $widget->get_field_id('selected_date'); ?>" name="<?php echo $widget->get_field_name('selected_date'); ?>" type="text" value="<?php echo esc_attr($selected_date); ?>">
    </p>
    <script>
        jQuery(document).ready(function ($) {
            $('.custom-datepicker').datepicker();
        });
    </script>
    <?php
    return $return;
}

Note: Remember to enqueue the jQuery UI datepicker library in your theme or plugin to make the datepicker functional.