Advanced Sidebar Menu - Version 4.1.3

Version Description

Download this release

Release Info

Developer Mat Lipe
Plugin Icon 128x128 Advanced Sidebar Menu
Version 4.1.3
Comparing to
See all releases

Code changes from version 4.1.2 to 4.1.3

advanced-sidebar-menu.php CHANGED
@@ -4,7 +4,7 @@ Plugin Name: Advanced Sidebar Menu
4
  Plugin URI: http://lipeimagination.info/wordpress/advanced-sidebar-menu/
5
  Description: Creates dynamic menu based on child/parent relationship.
6
  Author: Mat Lipe
7
- Version: 4.1.2
8
  Author URI: http://lipeimagination.info
9
  Since: 4.23.13
10
  */
4
  Plugin URI: http://lipeimagination.info/wordpress/advanced-sidebar-menu/
5
  Description: Creates dynamic menu based on child/parent relationship.
6
  Author: Mat Lipe
7
+ Version: 4.1.3
8
  Author URI: http://lipeimagination.info
9
  Since: 4.23.13
10
  */
lib/advancedSidebarMenu.php CHANGED
@@ -4,7 +4,7 @@
4
  /**
5
  * These Functions are Specific to the Advanced Sidebar Menu
6
  * @author Mat Lipe
7
- * @since 4.23.13
8
  *
9
  * @package Advanced Sidebar Menu
10
  */
@@ -17,6 +17,53 @@ class advancedSidebarMenu{
17
  var $order_by;
18
 
19
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  /**
21
  * Removes the closing </li> tag from a list item to allow for child menus inside of it
22
  *
@@ -170,10 +217,13 @@ class advancedSidebarMenu{
170
 
171
  /**
172
  * Determines if all the children should be included
173
- * @since 7/16/12
174
  * @return bool
175
  */
176
  function display_all(){
 
 
 
177
  if( $this->instance['display_all'] == 'checked' ){
178
  return true;
179
  } else {
@@ -211,10 +261,11 @@ class advancedSidebarMenu{
211
 
212
  /**
213
  * Determines if the parent page or cat should be included
214
- * @since 7/16/12
215
  * @return bool
216
  */
217
  function include_parent(){
 
218
  if( ($this->instance['include_parent'] == 'checked') && (!in_array($this->top_id, $this->exclude)) ){
219
  return true;
220
  } else {
@@ -225,14 +276,12 @@ class advancedSidebarMenu{
225
 
226
  /**
227
  * Echos the title of the widget to the page
228
- * @since 4.7.13
229
  */
230
  function title(){
231
  if( $this->instance['title'] != '' ){
232
-
233
  $title = apply_filters('widget_title', $this->instance['title'], $this->args, $this->instance );
234
-
235
- echo '<h4 class="widgettitle">' . $title . '</h4>';
236
  }
237
 
238
  }
4
  /**
5
  * These Functions are Specific to the Advanced Sidebar Menu
6
  * @author Mat Lipe
7
+ * @since 5.19.13
8
  *
9
  * @package Advanced Sidebar Menu
10
  */
17
  var $order_by;
18
 
19
 
20
+
21
+ /**
22
+ * Checks if a widgets checkbox is checked.
23
+ * * this one is special and does a double check
24
+ *
25
+ * @since 4.1.3
26
+ *
27
+ * @param string $name - name of checkbox
28
+ */
29
+ function checked($name){
30
+
31
+ if( isset( $this->instance[$name] ) && $this->instance[$name] == 'checked' ) return true;
32
+
33
+ return false;
34
+
35
+ }
36
+
37
+ /**
38
+ * Retrieves the Highest level Category Id
39
+ *
40
+ * @since 4.1.3
41
+ * @param int $catId - id of cat looking for top parent of
42
+ *
43
+ * @return int
44
+ */
45
+ function getTopCat( $catId ){
46
+ $cat_ancestors = array();
47
+ $cat_ancestors[] = $catId ;
48
+
49
+ do {
50
+ $cat_id = get_category($cat_id);
51
+ $cat_id = $cat_id->parent;
52
+ $cat_ancestors[] = $cat_id;
53
+ }
54
+ while ($cat_id);
55
+
56
+
57
+ //Reverse the array to start at the last
58
+ $this->ancestors = array_reverse( $cat_ancestors );
59
+
60
+ //forget the [0] because the parent of top parent is always 0
61
+ return $this->ancestors[1];
62
+
63
+ }
64
+
65
+
66
+
67
  /**
68
  * Removes the closing </li> tag from a list item to allow for child menus inside of it
69
  *
217
 
218
  /**
219
  * Determines if all the children should be included
220
+ * @since 5.19.13
221
  * @return bool
222
  */
223
  function display_all(){
224
+
225
+ if( !isset( $this->instance['display_all'] ) ) return false;
226
+
227
  if( $this->instance['display_all'] == 'checked' ){
228
  return true;
229
  } else {
261
 
262
  /**
263
  * Determines if the parent page or cat should be included
264
+ * @since 5.19.13
265
  * @return bool
266
  */
267
  function include_parent(){
268
+ if( !isset( $this->instance['include_parent'] ) ) return false;
269
  if( ($this->instance['include_parent'] == 'checked') && (!in_array($this->top_id, $this->exclude)) ){
270
  return true;
271
  } else {
276
 
277
  /**
278
  * Echos the title of the widget to the page
279
+ * @since 5.19.13
280
  */
281
  function title(){
282
  if( $this->instance['title'] != '' ){
 
283
  $title = apply_filters('widget_title', $this->instance['title'], $this->args, $this->instance );
284
+ echo $this->args['before_title'] . $title . $this->args['after_title'];
 
285
  }
286
 
287
  }
readme.txt CHANGED
@@ -4,12 +4,12 @@ Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=paypa
4
  Tags: menus, sidebar menu, heirchy, category menu, pages menu
5
  Requires at least: 3.1
6
  Tested up to: 3.5.1
7
- Stable tag: 4.1.2
8
 
9
  Creates a widget for both page and categories that will display the current page/category and all child pages or categories.
10
 
11
  == Description ==
12
- <h4>Now Supports an Unlimited Levels of Pages</h4>
13
 
14
  Creates a widget for both page and categories that will display the current page/category and an child pages or categories.
15
  Keeps the menu clean and usable.
@@ -38,7 +38,9 @@ Includes Category Options:
38
  <li>Levels of Categories to display</li>
39
  </ol>
40
 
41
- There is also built in functionality to overwrite the output of the widgets and the css to customize this and still be upgrade safe.
 
 
42
 
43
 
44
 
@@ -85,9 +87,6 @@ the folder you just created. You may edit the files at will to change the output
85
  You must have the option checked to use the built in CSS (in the widget) to be able to edit the css file in this way.
86
  The Others will work always.
87
 
88
- = Does this support multiple instances? =
89
-
90
- Yes.
91
 
92
  = Does the menu change for each page you are on? =
93
 
@@ -100,6 +99,11 @@ You can add classes to your theme's style.css file to style it accordingly.
100
  You may want to use something like margins to set the levels apart.
101
 
102
 
 
 
 
 
 
103
  == Changelog ==
104
  = 4.0.0 =
105
  * Added support for an unlimited number of page levels
4
  Tags: menus, sidebar menu, heirchy, category menu, pages menu
5
  Requires at least: 3.1
6
  Tested up to: 3.5.1
7
+ Stable tag: 4.1.3
8
 
9
  Creates a widget for both page and categories that will display the current page/category and all child pages or categories.
10
 
11
  == Description ==
12
+ <h4>Now Supports Unlimited Levels of Pages</h4>
13
 
14
  Creates a widget for both page and categories that will display the current page/category and an child pages or categories.
15
  Keeps the menu clean and usable.
38
  <li>Levels of Categories to display</li>
39
  </ol>
40
 
41
+ Templates may be overridden for customization of outputs and/or css.
42
+
43
+ Many built in filters for altering the way the widgets function.
44
 
45
 
46
 
87
  You must have the option checked to use the built in CSS (in the widget) to be able to edit the css file in this way.
88
  The Others will work always.
89
 
 
 
 
90
 
91
  = Does the menu change for each page you are on? =
92
 
99
  You may want to use something like margins to set the levels apart.
100
 
101
 
102
+ = What if I want functionality which is not built in? =
103
+
104
+ I do offer preminum services for buiding custom add-ons for additional functionality. Otherwise you are welcome to alter the code in any way or build your own add-ons. keep in mind, if you edit the code directly, it will break on update. The best way to customize is using the built in filters or template overides. If you have a cool add-on you have developed, let me know, I may want to publish your work.
105
+
106
+
107
  == Changelog ==
108
  = 4.0.0 =
109
  * Added support for an unlimited number of page levels
sidebar-menu.css ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .advanced-sidebar-menu ul li a{
2
+ font-weight: bold;
3
+ font-size: 130%;
4
+ text-decoration: none;
5
+ }
6
+
7
+ .advanced-sidebar-menu ul li a:hover{
8
+ text-decoration: underline;
9
+ }
10
+
11
+ .advanced-sidebar-menu ul ul li a{
12
+ font-weight: normal;
13
+ font-size: 100%;
14
+ }
15
+
16
+ .advanced-sidebar-menu ul{
17
+ margin: 0 0 0 18px;
18
+ list-style: none;
19
+ list-style-type: none;
20
+ }
21
+
22
+ .advanced-sidebar-menu ul li{
23
+ list-style:none;
24
+ list-style-type: none;
25
+ margin: 0;
26
+
27
+ }
28
+
29
+ .advanced-sidebar-menu li.current_page_item{
30
+ list-style-type: disc;
31
+ }
32
+
33
+ .advanced-sidebar-menu li.current_page_item a{
34
+ font-weight: bold;
35
+ }
views/category_list.php CHANGED
@@ -12,15 +12,18 @@
12
  */
13
 
14
 
15
- //Displays the title
16
- $asm->title();
17
 
18
 
 
 
19
  //Include the parent page if chosen
20
  if( $asm->include_parent() ){
21
  $content .= '<ul class="parent-sidebar-menu">';
22
- $content .= $asm->openListItem( wp_list_categories( 'echo=0&title_li=&include=' . $top_cat) );
 
23
  }
 
 
24
  //If there are children to display
25
  if( !empty($all_categories) ){
26
  $content .= '<ul class="child-sidebar-menu">';
@@ -45,7 +48,7 @@ if( $asm->include_parent() ){
45
  if( $asm->second_level_cat( $child_cat ) ){
46
  #-- Create a new menu with all the children under it
47
  $content .= '<ul class="grandchild-sidebar-menu">';
48
- $content .= wp_list_categories("echo=0&title_li=&exclude=".$instance['exclude']."&depth=3&child_of=" .$child_cat->cat_ID );
49
  $content .= '</ul>';
50
 
51
  }
12
  */
13
 
14
 
 
 
15
 
16
 
17
+ $content = '';
18
+
19
  //Include the parent page if chosen
20
  if( $asm->include_parent() ){
21
  $content .= '<ul class="parent-sidebar-menu">';
22
+ $content .= $asm->openListItem( wp_list_categories( 'echo=0&title_li=&include=' . trim($top_cat)) );
23
+
24
  }
25
+
26
+
27
  //If there are children to display
28
  if( !empty($all_categories) ){
29
  $content .= '<ul class="child-sidebar-menu">';
48
  if( $asm->second_level_cat( $child_cat ) ){
49
  #-- Create a new menu with all the children under it
50
  $content .= '<ul class="grandchild-sidebar-menu">';
51
+ $content .= wp_list_categories("echo=0&title_li=&exclude=".$instance['exclude']."&depth=3&child_of=" .$child_cat->cat_ID );
52
  $content .= '</ul>';
53
 
54
  }
views/page_list.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * The Ouput of the Advanced Sidebar Page Widget
4
  * @author Mat Lipe
5
- * @since 4.23.13
6
  *
7
  *
8
  * @uses to edit, create a file named page_list.php and put in a folder in the your theme called 'advanced-sidebar-menu
@@ -41,12 +41,9 @@ if( $child_pages ){
41
  } else {
42
  continue;
43
  }
44
- if( !$instance['legacy_mode'] ){
45
- #-- Displays all levels of granchild pages related to the current page
46
- $content .= $asm->displayGrandChildMenu($pID);
47
- } else{
48
- $content .= $asm->grandChildLegacyMode($pID);
49
- }
50
 
51
  $content .= '</li>';
52
  }
2
  /**
3
  * The Ouput of the Advanced Sidebar Page Widget
4
  * @author Mat Lipe
5
+ * @since 5.19.13
6
  *
7
  *
8
  * @uses to edit, create a file named page_list.php and put in a folder in the your theme called 'advanced-sidebar-menu
41
  } else {
42
  continue;
43
  }
44
+
45
+ $content .= $asm->displayGrandChildMenu($pID);
46
+
 
 
 
47
 
48
  $content .= '</li>';
49
  }
widgets/category.widget.php CHANGED
@@ -5,7 +5,7 @@
5
  * Creates a Widget of parent Child Categories
6
  *
7
  * @author mat lipe
8
- * @since 4.23.13
9
  * @package Advanced Sidebar Menu
10
  *
11
  */
@@ -27,59 +27,59 @@ class advanced_sidebar_menu_category extends WP_Widget {
27
 
28
 
29
  #-----------------------------------------------------------------------------------------------------------------------------------
30
- // this creates the widget form for the dashboard
31
- function form( $instance ) {
32
- // require( ADVANCED_SIDEBAR_DIR . 'advanced-sidebar-menu.js' );
33
- ?>
34
- <p> Title <br>
35
  <input id="<?php echo $this->get_field_name('title'); ?>"
36
- name="<?php echo $this->get_field_name('title'); ?>" size="50" type="text" value="<?php echo $instance['title']; ?>"/></p>
37
-
38
-
39
  <p> Include Parent Category <input id="<?php echo $this->get_field_name('include_parent'); ?>"
40
- name="<?php echo $this->get_field_name('include_parent'); ?>" type="checkbox" value="checked"
41
- <?php echo $instance['include_parent']; ?>/></p>
42
-
43
-
44
- <p> Include Parent Even With No Children <input id="<?php echo $this->get_field_name('include_childless_parent'); ?>"
45
- name="<?php echo $this->get_field_name('include_childless_parent'); ?>" type="checkbox" value="checked"
46
- <?php echo $instance['include_childless_parent']; ?>/></p>
47
-
48
- <p> Use this plugins styling <input id="<?php echo $this->get_field_name('css'); ?>"
49
- name="<?php echo $this->get_field_name('css'); ?>" type="checkbox" value="checked"
50
- <?php echo $instance['css']; ?>/></p>
51
-
52
- <p> Display Categories on Single Posts <input id="<?php echo $this->get_field_name('single'); ?>"
53
- name="<?php echo $this->get_field_name('single'); ?>" type="checkbox" value="checked"
54
- onclick="javascript:asm_reveal_element( 'new-widget-<?php echo $this->get_field_name('new_widget'); ?>' )"
55
- <?php echo $instance['single']; ?>/></p>
56
-
57
- <span id="new-widget-<?php echo $this->get_field_name('new_widget'); ?>" style="<?php
58
  if( $instance['single'] == checked ){
59
- echo 'display:block';
60
  } else {
61
- echo 'display:none';
62
- } ?>">
63
- <p>Display Each Single Post's Category
64
- <select id="<?php echo $this->get_field_name('new_widget'); ?>"
65
- name="<?php echo $this->get_field_name('new_widget'); ?>">
66
- <?php
67
- if( $instance['new_widget'] == 'widget' ){
68
- echo '<option value="widget" selected> In a new widget </option>';
69
- echo '<option value="list"> In another list in the same widget </option>';
70
- } else {
71
- echo '<option value="widget"> In a new widget </option>';
72
- echo '<option value="list" selected> In another list in the same widget </option>';
73
- }
74
-
75
- ?></select>
76
- </p>
77
  </span>
78
 
79
-
80
-
81
- <p> Categories to Exclude, Comma Separated:<input id="<?php echo $this->get_field_name('exclude'); ?>"
82
- name="<?php echo $this->get_field_name('exclude'); ?>" type="text" value="<?php echo $instance['exclude']; ?>"/></p>
83
 
84
 
85
  <p> Legacy Mode: (use pre 4.0 structure and css) <input id="<?php echo $this->get_field_name('legacy_mode'); ?>"
@@ -87,54 +87,48 @@ class advanced_sidebar_menu_category extends WP_Widget {
87
  <?php echo $instance['legacy_mode']; ?>/>
88
  </p>
89
 
90
-
91
-
92
-
93
  <p> Always Display Child Categories <input id="<?php echo $this->get_field_name('display_all'); ?>"
94
- name="<?php echo $this->get_field_name('display_all'); ?>" type="checkbox" value="checked"
95
- onclick="javascript:asm_reveal_element( 'levels-<?php echo $this->get_field_name('levels'); ?>' )"
96
- <?php echo $instance['display_all']; ?>/></p>
97
 
98
  <span id="levels-<?php echo $this->get_field_name('levels'); ?>" style="<?php
99
  if( $instance['display_all'] == checked ){
100
- echo 'display:block';
101
  } else {
102
- echo 'display:none';
103
  } ?>">
104
  <p> Levels to Display <select id="<?php echo $this->get_field_name('levels'); ?>"
105
  name="<?php echo $this->get_field_name('levels'); ?>">
106
  <?php
107
- for( $i= 1; $i<6; $i++ ){
108
- if( $i == $instance['levels'] ){
109
- echo '<option value="'.$i.'" selected>'.$i.'</option>';
110
- } else {
111
- echo '<option value="'.$i.'">'.$i.'</option>';
112
- }
113
- }
114
- echo '</select></p></span>';
115
 
116
 
117
  do_action('advanced_sidebar_menu_category_widget_form', $instance );
118
 
119
- }
120
 
121
- #------------------------------------------------------------------------------------------------------------------------------
122
- // this allows more than one instance
123
 
124
- function update( $new_instance, $old_instance ) {
125
- $instance = $old_instance;
126
- $instance['include_childless_parent'] = strip_tags($new_instance['include_childless_parent']);
127
- $instance['include_parent'] = strip_tags($new_instance['include_parent']);
128
- $instance['exclude'] = strip_tags($new_instance['exclude']);
129
- $instance['display_all'] = strip_tags($new_instance['display_all']);
130
- $instance['levels'] = strip_tags($new_instance['levels']);
131
- $instance['css'] = strip_tags($new_instance['css']);
132
- $instance['single'] = strip_tags($new_instance['single']); //Display on single pages
133
- $instance['new_widget'] = strip_tags($new_instance['new_widget']); //Create a new widget for each single category
134
- $instance['title'] = strip_tags($new_instance['title']);
135
- $instance['legacy_mode'] = strip_tags($new_instance['legacy_mode']);
136
- return $instance;
137
- }
138
 
139
 
140
 
@@ -144,128 +138,123 @@ class advanced_sidebar_menu_category extends WP_Widget {
144
  /**
145
  * Outputs the categories widget to the page
146
  *
147
- * @since 4.7.13
148
  * @uses loads the views/category_list.php
149
  *
150
  * @filters apply_filters('advanced_sidebar_menu_category_widget_output', $content, $args, $instance );
151
  *
152
  */
153
- function widget($args, $instance) {
154
- $asm = new advancedSidebarMenu;
 
 
155
  $asm->instance = $instance;
156
  $asm->args = $args;
157
 
 
 
 
 
 
 
158
  $exclude = explode(',', $instance['exclude']);
159
  $asm->exclude = $exclude;
160
 
161
- extract( $args);
162
- #-- Create a usable array of the excluded pages
163
-
164
- $cat_ids = $already_top = array();
165
- $asm_once = $asm_cat_widget_count = false; //keeps track of how many widgets this created
166
- $count = null;
167
-
168
-
169
-
170
- //If on a single page create an array of each category and create a list for each
171
- if( is_single() && ($instance['single'] == 'checked') ){
172
- $category_array = get_the_category();
173
- foreach( get_the_category() as $id => $cat ){
174
- $cat_ids[] = $cat->term_id;
175
- }
176
-
177
- //IF on a category page get the id of the category
178
- } elseif( is_category() ){
179
- $cat_ids[] = get_query_var('cat');
180
- }
181
 
182
  //Go through each category there will be only one if this is a category page mulitple possible if this is single
183
  foreach( $cat_ids as $cat_id ){
184
- $cat_ancestors = array ();
185
- $cat_ancestors[] = $cat_id ;
186
-
187
- do {
188
- $cat_id = get_category($cat_id );
189
- $cat_id = $cat_id->parent;
190
- $cat_ancestors[] = $cat_id ; }
191
- while ($cat_id );
192
-
193
 
194
- //Reverse the array to start at the last
195
- $cat_ancestors = array_reverse( $cat_ancestors );
196
- $asm->ancestors = $cat_ancestors;
 
 
197
 
198
- //forget the [0] because the parent of top parent is always 0
199
- $top_cat = $cat_ancestors[1];
200
- $asm->top_id = $top_cat;
201
-
202
-
203
- //Keeps track or already used top levels so this won't double up
204
- if( in_array( $top_cat, $already_top ) ){
205
- continue;
206
- }
207
- $already_top[] = $top_cat;
208
-
209
 
210
- //Check for children
211
- $all_categories = get_categories( array( 'child_of' => $top_cat ) );
212
-
213
- //for depreciation
214
- $all = $all_categories;
215
-
216
- //If there are any child categories or the include childless parent is checked
217
- if( !empty($all_categories ) || ($instance['include_childless_parent'] == 'checked' && !in_array($top_cat, $exclude)) ){
218
-
219
-
220
- //Creates a new widget for each category the single page has if the options are selected to do so
221
- if( !$asm_once || ($instance['new_widget'] == 'widget') ){
222
-
223
- //Start the menu
224
- echo $before_widget;
225
- $count++; // To change the id of the widget if there are multiple
226
- $asm_once = true; //There has been a div
227
- $close = true; //The div should be closed at the end
228
- if($instance['new_widget'] == 'list'){ $close = false;} //If this is a list leave it open for possible late ones
229
 
230
- } else {
231
- $close = false;
232
- }
233
-
234
-
235
-
236
- $legacy = isset( $instance['legacy_mode'] );
237
 
238
- if( $instance['css'] == 'checked' ){
239
- echo '<style type="text/css">';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
240
  include( $asm->file_hyercy('sidebar-menu.css', $legacy ) );
241
- echo '</style>';
242
- }
 
 
 
 
243
 
 
 
 
 
 
 
 
 
244
 
 
 
 
 
 
245
 
246
- //Bring in the view
247
- require( $asm->file_hyercy( 'category_list.php', $legacy ) );
248
 
249
- echo apply_filters('advanced_sidebar_menu_category_widget_output', $content, $args, $instance );
 
250
 
251
- if( $close ){
252
- //End the Widget Area
253
- echo $after_widget;
254
- }
 
 
255
 
256
- } //End if any children or include childless parent
257
  } //End of each cat loop
258
 
259
 
260
  //IF we were waiting for all the individual lists to complete
261
  if( !$close && $asm_once ){
262
- //End the Widget Area
263
- echo $after_widget;
264
-
 
265
  }
266
-
267
-
268
-
269
- } #== /widget()
270
-
271
  } #== /Clas
5
  * Creates a Widget of parent Child Categories
6
  *
7
  * @author mat lipe
8
+ * @since 5.19.13
9
  * @package Advanced Sidebar Menu
10
  *
11
  */
27
 
28
 
29
  #-----------------------------------------------------------------------------------------------------------------------------------
30
+ // this creates the widget form for the dashboard
31
+ function form( $instance ) {
32
+ // require( ADVANCED_SIDEBAR_DIR . 'advanced-sidebar-menu.js' );
33
+ ?>
34
+ <p> Title <br>
35
  <input id="<?php echo $this->get_field_name('title'); ?>"
36
+ name="<?php echo $this->get_field_name('title'); ?>" size="50" type="text" value="<?php echo $instance['title']; ?>"/></p>
37
+
38
+
39
  <p> Include Parent Category <input id="<?php echo $this->get_field_name('include_parent'); ?>"
40
+ name="<?php echo $this->get_field_name('include_parent'); ?>" type="checkbox" value="checked"
41
+ <?php echo $instance['include_parent']; ?>/></p>
42
+
43
+
44
+ <p> Include Parent Even With No Children <input id="<?php echo $this->get_field_name('include_childless_parent'); ?>"
45
+ name="<?php echo $this->get_field_name('include_childless_parent'); ?>" type="checkbox" value="checked"
46
+ <?php echo $instance['include_childless_parent']; ?>/></p>
47
+
48
+ <p> Use this plugins styling <input id="<?php echo $this->get_field_name('css'); ?>"
49
+ name="<?php echo $this->get_field_name('css'); ?>" type="checkbox" value="checked"
50
+ <?php echo $instance['css']; ?>/></p>
51
+
52
+ <p> Display Categories on Single Posts <input id="<?php echo $this->get_field_name('single'); ?>"
53
+ name="<?php echo $this->get_field_name('single'); ?>" type="checkbox" value="checked"
54
+ onclick="javascript:asm_reveal_element( 'new-widget-<?php echo $this->get_field_name('new_widget'); ?>' )"
55
+ <?php echo $instance['single']; ?>/></p>
56
+
57
+ <span id="new-widget-<?php echo $this->get_field_name('new_widget'); ?>" style="<?php
58
  if( $instance['single'] == checked ){
59
+ echo 'display:block';
60
  } else {
61
+ echo 'display:none';
62
+ } ?>">
63
+ <p>Display Each Single Post's Category
64
+ <select id="<?php echo $this->get_field_name('new_widget'); ?>"
65
+ name="<?php echo $this->get_field_name('new_widget'); ?>">
66
+ <?php
67
+ if( $instance['new_widget'] == 'widget' ){
68
+ echo '<option value="widget" selected> In a new widget </option>';
69
+ echo '<option value="list"> In another list in the same widget </option>';
70
+ } else {
71
+ echo '<option value="widget"> In a new widget </option>';
72
+ echo '<option value="list" selected> In another list in the same widget </option>';
73
+ }
74
+
75
+ ?></select>
76
+ </p>
77
  </span>
78
 
79
+
80
+
81
+ <p> Categories to Exclude, Comma Separated:<input id="<?php echo $this->get_field_name('exclude'); ?>"
82
+ name="<?php echo $this->get_field_name('exclude'); ?>" type="text" value="<?php echo $instance['exclude']; ?>"/></p>
83
 
84
 
85
  <p> Legacy Mode: (use pre 4.0 structure and css) <input id="<?php echo $this->get_field_name('legacy_mode'); ?>"
87
  <?php echo $instance['legacy_mode']; ?>/>
88
  </p>
89
 
90
+
 
 
91
  <p> Always Display Child Categories <input id="<?php echo $this->get_field_name('display_all'); ?>"
92
+ name="<?php echo $this->get_field_name('display_all'); ?>" type="checkbox" value="checked"
93
+ onclick="javascript:asm_reveal_element( 'levels-<?php echo $this->get_field_name('levels'); ?>' )"
94
+ <?php echo $instance['display_all']; ?>/></p>
95
 
96
  <span id="levels-<?php echo $this->get_field_name('levels'); ?>" style="<?php
97
  if( $instance['display_all'] == checked ){
98
+ echo 'display:block';
99
  } else {
100
+ echo 'display:none';
101
  } ?>">
102
  <p> Levels to Display <select id="<?php echo $this->get_field_name('levels'); ?>"
103
  name="<?php echo $this->get_field_name('levels'); ?>">
104
  <?php
105
+ for( $i= 1; $i<6; $i++ ){
106
+ if( $i == $instance['levels'] ){
107
+ echo '<option value="'.$i.'" selected>'.$i.'</option>';
108
+ } else {
109
+ echo '<option value="'.$i.'">'.$i.'</option>';
110
+ }
111
+ }
112
+ echo '</select></p></span>';
113
 
114
 
115
  do_action('advanced_sidebar_menu_category_widget_form', $instance );
116
 
117
+ }
118
 
 
 
119
 
120
+ /**
121
+ * Updates the widget data
122
+ *
123
+ * @filter - $newInstance = apply_filters('advanced_sidebar_menu_category_widget_update', $newInstance, $oldInstance );
124
+ * @since 5.19.13
125
+ */
126
+ function update( $newInstance, $oldInstance ) {
127
+ $newInstance['exclude'] = strip_tags($new_instance['exclude']);
128
+ $newInstance = apply_filters('advanced_sidebar_menu_category_widget_update', $newInstance, $oldInstance );
129
+
130
+ return $newInstance;
131
+ }
 
 
132
 
133
 
134
 
138
  /**
139
  * Outputs the categories widget to the page
140
  *
141
+ * @since 5.19.13
142
  * @uses loads the views/category_list.php
143
  *
144
  * @filters apply_filters('advanced_sidebar_menu_category_widget_output', $content, $args, $instance );
145
  *
146
  */
147
+ function widget($args, $instance) {
148
+
149
+ if( is_single() && !isset( $instance['single'] ) ) return;
150
+ $asm = new advancedSidebarMenu;
151
  $asm->instance = $instance;
152
  $asm->args = $args;
153
 
154
+ $legacy = $asm->checked('legacy_mode');
155
+
156
+ $cat_ids = $already_top = array();
157
+ $asm_once = $asm_cat_widget_count = false; //keeps track of how many widgets this created
158
+ $count = null;
159
+
160
  $exclude = explode(',', $instance['exclude']);
161
  $asm->exclude = $exclude;
162
 
163
+ extract( $args);
164
+
165
+
166
+ //If on a single page create an array of each category and create a list for each
167
+ if( is_single() && $asm->checked('single' ) ){
168
+ $category_array = get_the_category();
169
+ foreach( get_the_category() as $id => $cat ){
170
+ $cat_ids[] = $cat->term_id;
171
+ }
172
+
173
+ //IF on a category page get the id of the category
174
+ } elseif( is_category() ){
175
+ $cat_ids[] = get_query_var('cat');
176
+ }
 
 
 
 
 
 
177
 
178
  //Go through each category there will be only one if this is a category page mulitple possible if this is single
179
  foreach( $cat_ids as $cat_id ){
 
 
 
 
 
 
 
 
 
180
 
181
+ //Get the top category id
182
+ $asm->top_id = $asm->getTopCat($cat_id);
183
+
184
+ //Keeps track or already used top levels so this won't double up
185
+ if( in_array( $asm->top_id, $already_top ) ) continue;
186
 
187
+ $already_top[] = $asm->top_id;
 
 
 
 
 
 
 
 
 
 
188
 
189
+ //Check for children
190
+ $all_categories = $all = array_filter(get_categories( array( 'child_of' => $asm->top_id )) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
191
 
 
 
 
 
 
 
 
192
 
193
+ //If there are no children and not displaying childless parent - bail
194
+ if( empty($all_categories ) && !( $asm->checked('include_childless_parent') ) ) continue;
195
+ //If there are no children and the parent is excluded bail
196
+ if( empty($all_categories ) && in_array($asm->top_id, $exclude) ) continue;
197
+
198
+
199
+ //Creates a new widget for each category the single page has if the options are selected to do so
200
+ //Also starts the first widget
201
+ if( !$asm_once || ($instance['new_widget'] == 'widget') ){
202
+
203
+ //Start the menu
204
+ echo $before_widget;
205
+ if( !$asm_once ) {
206
+ $asm->title();
207
+ if( $asm->checked('css') ){
208
+ echo '<style type="text/css">';
209
  include( $asm->file_hyercy('sidebar-menu.css', $legacy ) );
210
+ echo '</style>';
211
+ }
212
+
213
+ $count++; // To change the id of the widget if there are multiple
214
+ $asm_once = true; //There has been a div
215
+ $close = true; //The div should be closed at the end
216
 
217
+ if($instance['new_widget'] == 'list'){
218
+ $close = false; //If this is a list leave it open for now
219
+ }
220
+
221
+ } else {
222
+ $close = false;
223
+ }
224
+
225
 
226
+ //for deprecation
227
+ $top_cat = $cat_id;
228
+ $cat_ancestors = $asm->ancestors;
229
+
230
+ }
231
 
232
+ //Bring in the view
233
+ require( $asm->file_hyercy( 'category_list.php', $legacy ) );
234
 
235
+
236
+ echo apply_filters('advanced_sidebar_menu_category_widget_output', $content, $args, $instance );
237
 
238
+ if( $close ){
239
+ //End the Widget Area
240
+ echo $after_widget;
241
+ echo '<!-- First $after_widget -->';
242
+ }
243
+
244
 
 
245
  } //End of each cat loop
246
 
247
 
248
  //IF we were waiting for all the individual lists to complete
249
  if( !$close && $asm_once ){
250
+ //End the Widget Area
251
+ echo $after_widget;
252
+ echo '<!-- Second $after_widget -->';
253
+
254
  }
255
+
256
+
257
+
258
+ } #== /widget()
259
+
260
  } #== /Clas
widgets/page.widget.php CHANGED
@@ -32,72 +32,79 @@ class advanced_sidebar_menu_page extends WP_Widget {
32
  * Not of ton of options here but who need them
33
  * Most of the magic happens automatically
34
  *
 
 
35
  * @since 4.23.13
36
  */
37
- function form( $instance ) {
38
  ?>
39
  <p> Title <br>
40
  <input id="<?php echo $this->get_field_id('title'); ?>"
41
- name="<?php echo $this->get_field_name('title'); ?>" size="50" type="text" value="<?php echo $instance['title']; ?>"/></p>
42
 
43
  <p> Include Parent Page: <input id="<?php echo $this->get_field_id('include_parent'); ?>"
44
- name="<?php echo $this->get_field_name('include_parent'); ?>" type="checkbox" value="checked"
45
- <?php echo $instance['include_parent']; ?>/></p>
46
-
47
-
48
- <p> Include Parent Even With No Children: <input id="<?php echo $this->get_field_id('include_childless_parent'); ?>"
49
- name="<?php echo $this->get_field_name('include_childless_parent'); ?>" type="checkbox" value="checked"
50
- <?php echo $instance['include_childless_parent']; ?>/></p>
51
-
52
- <p> Use this Plugin's Styling: <input id="<?php echo $this->get_field_id('css'); ?>"
53
- name="<?php echo $this->get_field_name('css'); ?>" type="checkbox" value="checked"
54
- <?php echo $instance['css']; ?>/></p>
55
-
56
- <p> Pages to Exclude, Comma Separated: <input id="<?php echo $this->get_field_id('exclude'); ?>"
57
- name="<?php echo $this->get_field_name('exclude'); ?>" type="text" value="<?php echo $instance['exclude']; ?>"/></p>
58
  <p> Legacy Mode: (use pre 4.0 structure and css) <input id="<?php echo $this->get_field_name('legacy_mode'); ?>"
59
  name="<?php echo $this->get_field_name('legacy_mode'); ?>" type="checkbox" value="checked"
60
  <?php echo $instance['legacy_mode']; ?>/>
61
  </p>
62
-
63
  <p> Always Display Child Pages: <input id="<?php echo $this->get_field_id('display_all'); ?>"
64
- name="<?php echo $this->get_field_name('display_all'); ?>" type="checkbox" value="checked"
65
- onclick="javascript:asm_reveal_element( 'levels-<?php echo $this->get_field_id('levels'); ?>' )"
66
- <?php echo $instance['display_all']; ?>/></p>
67
 
68
  <span id="levels-<?php echo $this->get_field_id('levels'); ?>" style="<?php
69
  if( $instance['display_all'] == 'checked' ){
70
- echo 'display:block';
71
  } else {
72
- echo 'display:none';
73
  } ?>">
74
  <p> Levels to Display: <select id="<?php echo $this->get_field_id('levels'); ?>"
75
  name="<?php echo $this->get_field_name('levels'); ?>">
76
  <?php
77
- for( $i= 1; $i<6; $i++ ){
78
- if( $i == $instance['levels'] ){
79
- echo '<option value="'.$i.'" selected>'.$i.'</option>';
80
- } else {
81
- echo '<option value="'.$i.'">'.$i.'</option>';
82
- }
83
- }
84
- echo '</select></p></span>';
85
 
86
 
87
  do_action('advanced_sidebar_menu_page_widget_form', $instance, $this->get_field_name('parent_only'), $this->get_field_id('parent_only'));
88
 
89
 
90
- }
91
 
92
 
93
  /**
94
  * Handles the saving of the widget
95
  *
96
- * @since 4.5.13
 
 
97
  */
98
- function update( $new_instance, $old_instance ) {
99
- $new_instance['exclude'] = strip_tags($new_instance['exclude']);
100
- return $new_instance;
 
 
 
101
  }
102
 
103
 
@@ -117,10 +124,10 @@ class advanced_sidebar_menu_page extends WP_Widget {
117
  * apply_filters('advanced_sidebar_menu_post_type', 'page', $args, $instance );
118
  *
119
  *
120
- * @since 4.7.13
121
  */
122
- function widget($args, $instance) {
123
- global $wpdb, $post, $table_prefix;
124
 
125
  //There will be no pages to generate on an archive page
126
  if( is_archive() ) return;
@@ -129,73 +136,77 @@ class advanced_sidebar_menu_page extends WP_Widget {
129
 
130
  $asm->instance = $instance;
131
  $asm->args = $args;
132
- extract($args);
133
-
134
- //Filter this one with a 'single' for a custom post type will default to working for pages only
135
- $post_type = apply_filters('advanced_sidebar_menu_post_type', 'page', $args, $instance );
136
- $asm->post_type = $post_type;
137
-
138
- if( $post_type != 'page' ){
 
 
 
 
139
  add_filter('page_css_class', array( $asm, 'custom_post_type_css'), 2, 4 );
140
 
141
  }
142
 
143
 
144
-
145
- #-- Create a usable array of the excluded pages
146
- $exclude = explode(',', $instance['exclude']);
147
  $asm->exclude = $exclude;
148
 
149
-
150
- #-- if the post has parents
151
- if($post->ancestors){
152
- $top_parent = end( $post->ancestors );
153
- } else {
154
- #--------- If this is the parent ------------------------------------------------
155
- $top_parent = $post->ID;
156
- }
157
-
158
-
159
- //Filter for specifying the top parent
160
- $top_parent = apply_filters('advanced_sidebar_menu_top_parent', $top_parent, $post, $args, $instance );
161
  $asm->top_id = $top_parent;
162
 
163
 
164
  //Filter for specifiying the order by
165
  $order_by = apply_filters('advanced_sidebar_menu_order_by', 'menu_order', $post, $args, $instance );
166
- $asm->order_by = $order_by;
 
167
 
 
 
 
 
168
 
169
- /**
170
- * Must be done this way to prevent doubling up of pages
171
- */
172
- $child_pages = $wpdb->get_results( "SELECT ID FROM ". $wpdb->posts ." WHERE post_parent = $top_parent AND post_status='publish' AND post_type='$post_type' Order by $order_by" );
173
-
174
- //for depreciation
175
- $p = $top_parent;
176
- $result = $child_pages = apply_filters( 'advanced_sidebar_menu_child_pages', $child_pages, $post, $args, $instance );
177
 
178
- #---- if there are no children do not display the parent unless it is check to do so
179
- if( ($child_pages) || (($instance['include_childless_parent'] == 'checked') && (!in_array($top_parent, $exclude)) ) ){
180
-
181
- $legacy = isset( $instance['legacy_mode'] );
182
 
183
- if( $instance['css'] == 'checked' ){
184
- echo '<style type="text/css">';
185
- include( $asm->file_hyercy('sidebar-menu.css', $legacy ) );
186
- echo '</style>';
187
- }
188
-
189
-
190
- //Start the menu
191
- echo $before_widget;
192
- #-- Bring in the
193
- require( $asm->file_hyercy( 'page_list.php', $legacy ) );
 
 
194
  echo apply_filters('advanced_sidebar_menu_page_widget_output',$content, $args, $instance );
195
- echo $after_widget;
196
 
197
- }
198
 
199
- } #== /widget()
200
-
201
  } #== /Clas
32
  * Not of ton of options here but who need them
33
  * Most of the magic happens automatically
34
  *
35
+ * @filters do_action('advanced_sidebar_menu_page_widget_form', $instance, $this->get_field_name('parent_only'), $this->get_field_id('parent_only'));
36
+ *
37
  * @since 4.23.13
38
  */
39
+ function form( $instance ) {
40
  ?>
41
  <p> Title <br>
42
  <input id="<?php echo $this->get_field_id('title'); ?>"
43
+ name="<?php echo $this->get_field_name('title'); ?>" size="50" type="text" value="<?php echo $instance['title']; ?>"/></p>
44
 
45
  <p> Include Parent Page: <input id="<?php echo $this->get_field_id('include_parent'); ?>"
46
+ name="<?php echo $this->get_field_name('include_parent'); ?>" type="checkbox" value="checked"
47
+ <?php echo $instance['include_parent']; ?>/></p>
48
+
49
+
50
+ <p> Include Parent Even With No Children: <input id="<?php echo $this->get_field_id('include_childless_parent'); ?>"
51
+ name="<?php echo $this->get_field_name('include_childless_parent'); ?>" type="checkbox" value="checked"
52
+ <?php echo $instance['include_childless_parent']; ?>/></p>
53
+
54
+ <p> Use this Plugin's Styling: <input id="<?php echo $this->get_field_id('css'); ?>"
55
+ name="<?php echo $this->get_field_name('css'); ?>" type="checkbox" value="checked"
56
+ <?php echo $instance['css']; ?>/></p>
57
+
58
+ <p> Pages to Exclude, Comma Separated: <input id="<?php echo $this->get_field_id('exclude'); ?>"
59
+ name="<?php echo $this->get_field_name('exclude'); ?>" type="text" value="<?php echo $instance['exclude']; ?>"/></p>
60
  <p> Legacy Mode: (use pre 4.0 structure and css) <input id="<?php echo $this->get_field_name('legacy_mode'); ?>"
61
  name="<?php echo $this->get_field_name('legacy_mode'); ?>" type="checkbox" value="checked"
62
  <?php echo $instance['legacy_mode']; ?>/>
63
  </p>
64
+
65
  <p> Always Display Child Pages: <input id="<?php echo $this->get_field_id('display_all'); ?>"
66
+ name="<?php echo $this->get_field_name('display_all'); ?>" type="checkbox" value="checked"
67
+ onclick="javascript:asm_reveal_element( 'levels-<?php echo $this->get_field_id('levels'); ?>' )"
68
+ <?php echo $instance['display_all']; ?>/></p>
69
 
70
  <span id="levels-<?php echo $this->get_field_id('levels'); ?>" style="<?php
71
  if( $instance['display_all'] == 'checked' ){
72
+ echo 'display:block';
73
  } else {
74
+ echo 'display:none';
75
  } ?>">
76
  <p> Levels to Display: <select id="<?php echo $this->get_field_id('levels'); ?>"
77
  name="<?php echo $this->get_field_name('levels'); ?>">
78
  <?php
79
+ for( $i= 1; $i<6; $i++ ){
80
+ if( $i == $instance['levels'] ){
81
+ echo '<option value="'.$i.'" selected>'.$i.'</option>';
82
+ } else {
83
+ echo '<option value="'.$i.'">'.$i.'</option>';
84
+ }
85
+ }
86
+ echo '</select></p></span>';
87
 
88
 
89
  do_action('advanced_sidebar_menu_page_widget_form', $instance, $this->get_field_name('parent_only'), $this->get_field_id('parent_only'));
90
 
91
 
92
+ }
93
 
94
 
95
  /**
96
  * Handles the saving of the widget
97
  *
98
+ * @filters apply_filters('advanced_sidebar_menu_page_widget_update', $newInstance, $oldInstance );
99
+ *
100
+ * @since 4.26.13
101
  */
102
+ function update( $newInstance, $oldInstance ) {
103
+ $newInstance['exclude'] = strip_tags($newInstance['exclude']);
104
+
105
+ $newInstance = apply_filters('advanced_sidebar_menu_page_widget_update', $newInstance, $oldInstance );
106
+
107
+ return $newInstance;
108
  }
109
 
110
 
124
  * apply_filters('advanced_sidebar_menu_post_type', 'page', $args, $instance );
125
  *
126
  *
127
+ * @since 5.19.13
128
  */
129
+ function widget($args, $instance) {
130
+ global $wpdb, $post, $table_prefix;
131
 
132
  //There will be no pages to generate on an archive page
133
  if( is_archive() ) return;
136
 
137
  $asm->instance = $instance;
138
  $asm->args = $args;
139
+ extract($args);
140
+
141
+ //Filter this one with a 'single' for a custom post type will default to working for pages only
142
+ $post_type = apply_filters('advanced_sidebar_menu_post_type', 'page', $args, $instance );
143
+
144
+ if( !(is_single() || is_page() ) || (get_post_type() != $post_type) ) return;
145
+
146
+
147
+ $asm->post_type = $post_type;
148
+
149
+ if( $post_type != 'page' ){
150
  add_filter('page_css_class', array( $asm, 'custom_post_type_css'), 2, 4 );
151
 
152
  }
153
 
154
 
155
+
156
+ #-- Create a usable array of the excluded pages
157
+ $exclude = explode(',', $instance['exclude']);
158
  $asm->exclude = $exclude;
159
 
160
+
161
+ #-- if the post has parents
162
+ if($post->ancestors){
163
+ $top_parent = end( $post->ancestors );
164
+ } else {
165
+ #--------- If this is the parent ------------------------------------------------
166
+ $top_parent = $post->ID;
167
+ }
168
+
169
+
170
+ //Filter for specifying the top parent
171
+ $top_parent = apply_filters('advanced_sidebar_menu_top_parent', $top_parent, $post, $args, $instance );
172
  $asm->top_id = $top_parent;
173
 
174
 
175
  //Filter for specifiying the order by
176
  $order_by = apply_filters('advanced_sidebar_menu_order_by', 'menu_order', $post, $args, $instance );
177
+ $asm->order_by = $order_by;
178
+
179
 
180
+ /**
181
+ * Must be done this way to prevent doubling up of pages
182
+ */
183
+ $child_pages = $wpdb->get_results( "SELECT ID FROM ". $wpdb->posts ." WHERE post_parent = $top_parent AND post_status='publish' AND post_type='$post_type' Order by $order_by" );
184
 
185
+ //for depreciation
186
+ $p = $top_parent;
187
+ $result = $child_pages = apply_filters( 'advanced_sidebar_menu_child_pages', $child_pages, $post, $args, $instance );
 
 
 
 
 
188
 
189
+ #---- if there are no children do not display the parent unless it is check to do so
190
+ if( ($child_pages) || $asm->checked('include_childless_parent') && (!in_array($top_parent, $exclude) ) ){
 
 
191
 
192
+ $legacy = $asm->checked('legacy_mode' );
193
+
194
+ if( $asm->checked('css') ){
195
+ echo '<style type="text/css">';
196
+ include( $asm->file_hyercy('sidebar-menu.css', $legacy ) );
197
+ echo '</style>';
198
+ }
199
+
200
+
201
+ //Start the menu
202
+ echo $before_widget;
203
+ #-- Bring in the
204
+ require( $asm->file_hyercy( 'page_list.php', $legacy ) );
205
  echo apply_filters('advanced_sidebar_menu_page_widget_output',$content, $args, $instance );
206
+ echo $after_widget;
207
 
208
+ }
209
 
210
+ } #== /widget()
211
+
212
  } #== /Clas