Skip to content

Instantly share code, notes, and snippets.

@iamshanto
Last active August 29, 2015 14:02
Show Gist options
  • Save iamshanto/9cd285d67d92c8aef158 to your computer and use it in GitHub Desktop.
Save iamshanto/9cd285d67d92c8aef158 to your computer and use it in GitHub Desktop.
Extend Wordpress Widget
<?php
class CustomExtentWidget
{
function in_widget_form($widget, $return, $instance)
{
if (!in_array($widget->id_base, array('text'))) {
return $instance;
}
if (!isset($instance['classes'])) $instance['classes'] = null;
$fields = "<p>\n";
// show dropdown
$pages = get_pages();
$fields .= "<label for='widget-{$widget->id_base}-{$widget->number}-classes'>" . apply_filters('widget_css_classes_class', esc_html__('Title Link to Page')) . ":</label>";
$fields .= "<select name='widget-{$widget->id_base}[{$widget->number}][link_page]' id='widget-{$widget->id_base}-{$widget->number}-link_page'>";
$fields .= "<option value=''>" . esc_attr__('Select') . "</option>";
foreach ($pages as $page) {
$selected = ($instance['link_page'] == $page->ID) ? 'selected="selected"' : '';
$fields .= "<option value='" . $page->ID . "' " . $selected . ">" . $page->post_title . "</option>";
}
$fields .= "</select>";
$fields .= "</p>";
do_action('widget_css_classes_form', $fields, $instance);
echo $fields;
return $instance;
}
function widget_update_callback($instance, $new_instance)
{
$instance['link_page'] = $new_instance['link_page'];
do_action('widget_css_classes_update', $instance, $new_instance);
return $instance;
}
function widget_title($title)
{
$title = html_entity_decode($title);
return $title;
}
function widget_display_callback($instance)
{
if (!empty($instance['title']) && !empty($instance['link_page'])) {
$instance['title'] = '<a href="' . get_permalink($instance['link_page']) . '">' . $instance['title'] . '</a>';
}
return $instance;
}
}
add_action('in_widget_form', array('CustomExtentWidget', 'in_widget_form'), 10, 3);
add_filter('widget_update_callback', array('CustomExtentWidget', 'widget_update_callback'), 10, 2);
add_filter('widget_title', array('CustomExtentWidget', 'widget_title'));
add_filter('widget_display_callback', array('CustomExtentWidget', 'widget_display_callback'));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment