Title: Modify Plugin
Last modified: August 21, 2016

---

# Modify Plugin

 *  [ajcke](https://wordpress.org/support/users/ajcke/)
 * (@ajcke)
 * [12 years ago](https://wordpress.org/support/topic/modify-plugin-1/)
 * I REALLY like this [Sub Pages Widget plugin](http://wordpress.org/plugins/subpages-widget/),
   but it has one huge problem – once the widget is used in one sidebar it cannot
   be used on any other sidebars. What can I modify in its code to make this happen?
   The code is below.
 *     ```
       // Put functions into one big function we'll call at the plugins_loaded
       // action. This ensures that all required plugin functions are defined.
       function widget_subpages_init() {
   
       	// Check for the required plugin functions. This will prevent fatal
       	// errors occurring when you deactivate the dynamic-sidebar plugin.
       	if ( !function_exists('register_sidebar_widget') )
       		return;
   
       	// This is the function that outputs our little Google search form.
       	function widget_subpages($args) {
       		global $post;
       		// $args is an array of strings that help widgets to conform to
       		// the active theme: before_widget, before_title, after_widget,
       		// and after_title are the array keys. Default tags: li and h2.
       		extract($args);
           if (is_page())
           {
         		// Each widget can store its own options. We keep strings here.
         		$options = get_option('widget_subpages');
         		$title = $options['title'];
   
         		// default values for the items added in version 1.1
         		$useRoot = 1;  // we use the root page per default
             $onlyFirstLevel = 0; // display all children
             $parentIcon = '<='; // the default parent icon is "<="
             $parentPosition = 'top'; // the parent row is added at the top
             $addParent = 1; // add the parent row the list
   
         		// If an old version is used where this config is not defined
         		// don't try to load the config value use the default instead
             if (isset($options['useRoot']))
             {
         		   $useRoot = $options['useRoot'];
         		}
   
         		if (isset($options['onlyFirstLevel']))
             {
         		   $onlyFirstLevel = $options['onlyFirstLevel'];
         		}  	
   
         		if (isset($options['parentIcon']))
             {
         		   $parentIcon = $options['parentIcon'];
         		}
   
             if (isset($options['parentPosition']))
             {
         		   $parentPosition = $options['parentPosition'];
         		}
   
         		if (isset($options['addParent']))
             {
         		   $addParent = $options['addParent'];
         		}
   
             $rootPost = $post;
   
             // find out the root page only when needed
             if ($useRoot)
             {
               // find the root page and use it
               while ($rootPost->post_parent != 0)
               {
                 $rootPost = &get_post($rootPost->post_parent);
               }
             }      
   
             // If only the first level should be used set the
             // depthStr to the correct value.
             // see http://codex.wordpress.org/Template_Tags/wp_list_pages for more information
             $depthStr = '';
             if ($onlyFirstLevel && !$useRoot)
             {
               $depthStr='&depth=1';
             }
   
             // the title
             $title = $title.$rootPost->post_title;
   
             $output = wp_list_pages('sort_column=menu_order'.$depthStr.'&title_li=&echo=0&child_of='.$rootPost->ID);
   
             // add the parent page if the parent page should not be used
             // and the parent page should be added
             // and the page has an parent page.
             if (!$useRoot and $addParent and $rootPost->post_parent != 0)
           		{
           		   $parentPage = &get_post($rootPost->post_parent);
           		   $parentTitle = $parentPage->post_title;
           		   // do we add the parent page at the top or the bottom.
           		   if ($parentPosition=='top')
           		   {
           		    $output = '<li><a href="'.get_permalink($rootPost->post_parent).'">'.$parentIcon.' '.$parentTitle.'</a></li>'.$output;
           		   }
           		   else
           		   {
           		    $output = $output.'<li><a href="'.get_permalink($rootPost->post_parent).'">'.$parentIcon.' '.$parentTitle.'</a></li>';
                  }
               }  
   
             if (!empty($output))
             {
           		// These lines generate our output. Widgets can be very complex
           		// but as you can see here, they can also be very, very simple.
           		echo $before_widget . $before_title;
               echo '<a href="'.get_permalink($rootPost->ID).'">'.$title.'</a>'.$after_title;
           		echo '<ul>';
   
               echo $output;
               echo '</ul>';
           		echo $after_widget;
         		}
       		}
       	}
   
       	// This is the function that outputs the form to let the users edit
       	// the widget's title. It's an optional feature that users cry for.
       	function widget_subpages_control() {
   
       		// Get our options and see if we're handling a form submission.
       		$options = get_option('widget_subpages');
       		if ( !is_array($options) )
       		{
       			$options = array('title'=>'', 'useRoot'=>1, 'onlyFirstLevel'=>0, 'parentIcon'=>'<=', 'parentPosition'=>'top');
       		}
   
       		if ( $_POST['subpages-submit'] ) {
       			// Remember to sanitize and format use input appropriately.
       			$options['title'] = strip_tags(stripslashes($_POST['subpages-title']));
             $options['useRoot'] = isset($_POST['subpages-useRoot']);
             $options['onlyFirstLevel'] = isset($_POST['subpages-onlyFirstLevel']);
             $options['parentIcon'] = stripslashes($_POST['subpages-parentIcon']);
             $options['parentPosition'] = strip_tags(stripslashes($_POST['subpages-parentPosition']));
             $options['addParent'] = isset($_POST['subpages-addParent']);
       			update_option('widget_subpages', $options);
       		}
   
       		// Be sure you format your options to be valid HTML attributes.
       		$title = htmlspecialchars($options['title'], ENT_QUOTES);
       		$useRoot = 'checked="checked"';
       		$onlyFirstLevel='';
       		$parentIcon = "<=";
       		$parentPosition = 'top';
       		$addParent = 'checked="checked"';
   
       		if (isset($options['useRoot']))
           {
             $useRoot = $options['useRoot'] ? 'checked="checked"' : '';
           }
   
           if (isset($options['onlyFirstLevel']))
           {
             $onlyFirstLevel = $options['onlyFirstLevel'] ? 'checked="checked"' : '';
           }
   
           if (isset($options['parentIcon']))
           {
             $parentIcon = htmlspecialchars($options['parentIcon'], ENT_QUOTES);
           }
   
           if (isset($options['parentPosition']))
           {
             $parentPosition = htmlspecialchars($options['parentPosition'], ENT_QUOTES);
           }
   
           if (isset($options['addParent']))
           {
             $addParent = $options['addParent'] ? 'checked="checked"' : '';
           }
   
           $topSet = $parentPosition == 'top' ? 'checked="checked"' : '';
       		$bottomSet = $parentPosition == 'bottom' ? 'checked="checked"' : '';
   
       		// Here is our little form segment. Notice that we don't need a
       		// complete form. This will be embedded into the existing form.
       		echo '<p style="text-align:right;"><label for="subpages-title">' . __('Title:') . ' <input style="width: 200px;" id="subpages-title" name="subpages-title" type="text" value="'.$title.'" /></label></p>';
           echo '<p style="text-align:right;margin-right:40px;"><label for="subpages-useRoot" style="text-align:right;">'.__('Use Root:').'<input class="checkbox" type="checkbox" '.$useRoot.' id="subpages-useRoot" name="subpages-useRoot" /></label></p>';
           echo '<p style="text-align:right;margin-right:40px;"><label for="subpages-onlyFirstLevel" style="text-align:right;">'.__('First level only:').'<input class="checkbox" type="checkbox" '.$onlyFirstLevel.' id="subpages-onlyFirstLevel" name="subpages-onlyFirstLevel" /></label></p>';
           echo '<p style="text-align:right;margin-right:40px;"><label for="subpages-addParent" style="text-align:right;">'.__('Add Parent Page:').'<input class="checkbox" type="checkbox" '.$addParent.' id="subpages-addParent" name="subpages-addParent" /></label></p>';
           echo '<p style="text-align:right;"><label for="subpages-parentIcon">' . __('Parent Icon:') . ' <input style="width: 200px;" id="subpages-parentIcon" name="subpages-parentIcon" type="text" value="'.$parentIcon.'" /></label></p>';
           echo '<p style="text-align:right;margin-right:40px;"><label for="subpages-parentPosition" style="text-align:right;">'.__('Position:').'<input type="radio" name="subpages-parentPosition" id="subpages-parentPosition-top" value="top"'.$topSet.'> Top  <input type="radio" name="subpages-parentPosition" id="subpages-color-bottom" value="bottom"'.$bottomSet.'> Bottom </label></p>';
       		echo '<input type="hidden" id="subpages-submit" name="subpages-submit" value="1" />';
       	}
   
       	// This registers our widget so it appears with the other available
       	// widgets and can be dragged and dropped into any active sidebars.
       	register_sidebar_widget(array('Sub Page Menu', 'widgets'), 'widget_subpages');
   
       	// This registers our optional widget control form. Because of this
       	// our widget will have a button that reveals a 300x100 pixel form.
       	register_widget_control(array('Sub Page Menu', 'widgets'), 'widget_subpages_control', 300, 190);
       }
   
       // Run our code later in case this loads prior to any required plugins.
       add_action('widgets_init', 'widget_subpages_init');
   
       ?>
       ```
   

Viewing 4 replies - 1 through 4 (of 4 total)

 *  [esmi](https://wordpress.org/support/users/esmi/)
 * (@esmi)
 * [12 years ago](https://wordpress.org/support/topic/modify-plugin-1/#post-4919041)
 * Were you aware that this plugin hasn’t been updated in nearly 7 years? You would
   be far better off looking for another plugin. Or even writing your own.
 *  Thread Starter [ajcke](https://wordpress.org/support/users/ajcke/)
 * (@ajcke)
 * [12 years ago](https://wordpress.org/support/topic/modify-plugin-1/#post-4919045)
 * Yes. I know, but it does exactly what we need it to do. If you skim through the
   code do you see anything that looks dated? Meaning – could break something in
   the near future? We’ve spent a lot of time looking for another plugin, but none
   do what this one does.
 *  [esmi](https://wordpress.org/support/users/esmi/)
 * (@esmi)
 * [12 years ago](https://wordpress.org/support/topic/modify-plugin-1/#post-4919048)
 * I’m sorry but, speaking from a purely personal pov, I wouldn’t touch such an 
   old plugin with a barge pole.
 *  Thread Starter [ajcke](https://wordpress.org/support/users/ajcke/)
 * (@ajcke)
 * [12 years ago](https://wordpress.org/support/topic/modify-plugin-1/#post-4919077)
 * If I could get the functionality of this plugin hard coded into a sidebar that
   would be great. [Here is how the plugin displays](http://hn.k12.oh.us/wp-content/uploads/2014/05/Sub-Pages-Widget.png)

Viewing 4 replies - 1 through 4 (of 4 total)

The topic ‘Modify Plugin’ is closed to new replies.

## Tags

 * [child page](https://wordpress.org/support/topic-tag/child-page/)
 * [code](https://wordpress.org/support/topic-tag/code/)
 * [parent page](https://wordpress.org/support/topic-tag/parent-page/)
 * [php](https://wordpress.org/support/topic-tag/php/)

 * 4 replies
 * 2 participants
 * Last reply from: [ajcke](https://wordpress.org/support/users/ajcke/)
 * Last activity: [12 years ago](https://wordpress.org/support/topic/modify-plugin-1/#post-4919077)
 * Status: not resolved

## Topics

### Topics with no replies

### Non-support topics

### Resolved topics

### Unresolved topics

### All topics
