Advanced Sidebar Menu - Version 2.1

Version Description

  • Added default syling.
Download this release

Release Info

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

Code changes from version 2.0.1 to 2.1

Files changed (4) hide show
  1. advanced-sidebar-menu.php +66 -52
  2. readme.txt +7 -4
  3. screenshot-1.PNG +0 -0
  4. sidebar-menu.css +39 -0
advanced-sidebar-menu.php CHANGED
@@ -4,9 +4,9 @@ Plugin Name: Advanced Sidebar Menu
4
Plugin URI: http://lipeimagination.info
5
Description: Creates dynamic menu based on child/parent relationship.
6
Author: Mat Lipe
7
- Version: 2.0.1
8
Author URI: http://lipeimagination.info
9
- Since: 1/24/12
10
Email: mat@lipeimagination.info
11
12
*/
@@ -21,42 +21,46 @@ class advanced_sidebar_menu extends WP_Widget {
21
function form( $instance ) {
22
require( 'advanced-sidebar-menu.js' );
23
?>
24
-
25
-
26
-
27
- <p> Include Parent Page <input id="<?php echo $this->get_field_name('include_parent'); ?>"
28
- name="<?php echo $this->get_field_name('include_parent'); ?>" type="checkbox" value="checked"
29
<?php echo $instance['include_parent']; ?>/></p>
30
-
31
-
32
<p> Include Parent Even With No Children<input id="<?php echo $this->get_field_name('include_childless_parent'); ?>"
33
- name="<?php echo $this->get_field_name('include_childless_parent'); ?>" type="checkbox" value="checked"
34
<?php echo $instance['include_childless_parent']; ?>/></p>
35
-
36
- <p> Pages to Exclude, Comma Separated:<input id="<?php echo $this->get_field_name('exclude'); ?>"
37
name="<?php echo $this->get_field_name('exclude'); ?>" type="text" value="<?php echo $instance['exclude']; ?>"/></p>
38
-
39
- <p> Always Display Child Pages <input id="<?php echo $this->get_field_name('display_all'); ?>"
40
- name="<?php echo $this->get_field_name('display_all'); ?>" type="checkbox" value="checked"
41
onclick="javascript:reveal_element( 'levels-<?php echo $this->get_field_name('levels'); ?>' )"
42
<?php echo $instance['display_all']; ?>/></p>
43
-
44
- <span id="levels-<?php echo $this->get_field_name('levels'); ?>" style="<?php
45
if( $instance['display_all'] == checked ){
46
echo 'display:block';
47
} else {
48
echo 'display:none';
49
- } ?>">
50
- <p> Levels to Display <select id="<?php echo $this->get_field_name('levels'); ?>"
51
name="<?php echo $this->get_field_name('levels'); ?>">
52
- <?php
53
for( $i= 1; $i<6; $i++ ){
54
if( $i == $instance['levels'] ){
55
echo '<option value="'.$i.'" selected>'.$i.'</option>';
56
} else {
57
echo '<option value="'.$i.'">'.$i.'</option>';
58
}
59
- }
60
echo '</select></p></span>';
61
}
62
@@ -70,6 +74,7 @@ class advanced_sidebar_menu extends WP_Widget {
70
$instance['exclude'] = strip_tags($new_instance['exclude']);
71
$instance['display_all'] = strip_tags($new_instance['display_all']);
72
$instance['levels'] = strip_tags($new_instance['levels']);
73
return $instance;
74
}
75
@@ -93,101 +98,110 @@ class advanced_sidebar_menu extends WP_Widget {
93
global $wpdb;
94
global $p;
95
global $post;
96
-
97
#-- Create a usable array of the excluded pages
98
$exclude = explode(',', $instance['exclude']);
99
-
100
-
101
#-- if the post has parrents
102
if($post->ancestors){
103
-
104
$parent = $wpdb->get_var( "SELECT post_parent from wp_posts WHERE ID=".$post->ID );
105
-
106
//--- If there is a parent of the post set $p to it and check if there is a parent as well
107
while($parent != FALSE){
108
$p = $parent;
109
$parent = $wpdb->get_var( "SELECT post_parent from wp_posts WHERE ID=".$parent);
110
}
111
-
112
} else {
113
#--------- If this is the parent ------------------------------------------------
114
$p = $post->ID;
115
}
116
-
117
#-- Makes this work with all table prefixes
118
#-- Added 1/22/12
119
global $table_prefix;
120
-
121
122
$result = $wpdb->get_results( "SELECT ID FROM ".$table_prefix."posts WHERE post_parent = $p AND post_type='page' Order by menu_order" );
123
-
124
#---- if there are no children do not display the parent unless it is check to do so
125
if($result != false || $instance['include_childless_parent'] == 'checked' ){
126
-
127
- //Start the menu
128
echo '<div id="'.$args['widget_id'].'" class="advanced-sidebar-menu widget">';
129
-
130
- echo '<ul class="parent-sidebar-menu" >';
131
#-- if the checkbox to include parent is checked
132
if( $instance['include_parent'] == 'checked' ){
133
$parent_toggle = TRUE;
134
-
135
- #-- If the page is not excluded from the menu
136
- if( !in_array($p, $exclude) ){
137
#-- list the parent page
138
wp_list_pages("sort_column=menu_order&title_li=&echo=1&depth=1&include=".$p);
139
}
140
-
141
}
142
}
143
144
//=----------------------------------- makes the Child Pages list -----------------------------------------
145
-
146
//If there are children start the Child Sidebar Menu
147
if( $result != FALSE ){
148
echo '<ul class="child-sidebar-menu">';
149
-
150
#-- If they want all the pages displayed always
151
if( $instance['display_all'] == 'checked' ){
152
wp_list_pages("sort_column=menu_order&title_li=&echo=1&child_of=".$p."&depth=".$instance['levels']."&exclude=".$instance['exclude']);
153
} else {
154
-
155
#-- Display children of current page's parent only
156
foreach($result as $pID){
157
-
158
#-- If the page is not in the excluded ones
159
if( !in_array($pID->ID, $exclude) ){
160
#--echo the current page from the $result
161
wp_list_pages("sort_column=menu_order&title_li=&echo=1&depth=1&include=".$pID->ID);
162
}
163
-
164
#-- if the link that was just listed is the current page we are on
165
if($pID->ID == $post->ID or $pID->ID == $post->post_parent or @in_array($pID->ID, $post->ancestors) ){
166
-
167
$kids = $wpdb->get_results( "SELECT ID FROM ".$table_prefix."posts WHERE post_parent = ".$pID->ID." AND post_type='page' " );
168
if( $kids != FALSE ){
169
-
170
#-- Create a new menu with all the children under it
171
echo '<ul class="grandchild-sidebar-menu">';
172
173
wp_list_pages("sort_column=menu_order&title_li=&echo=1&exclude=".$instance['exclude']."&depth=3&child_of=".$pID->ID);
174
-
175
echo '</ul>';
176
}
177
}
178
}
179
}
180
-
181
#-- Close the First Level menu
182
echo '</ul><!-- End child-sidebar-menu -->';
183
-
184
}
185
#-- If there was a menu close it off
186
if($result != false || $instance['include_childless_parent'] == 'checked' ){
187
-
188
- echo '</ul></div><!-- end of very-custom-menu -->';
189
}
190
-
191
} #== /widget()
192
-
193
} #== /Class
4
Plugin URI: http://lipeimagination.info
5
Description: Creates dynamic menu based on child/parent relationship.
6
Author: Mat Lipe
7
+ Version: 2.1
8
Author URI: http://lipeimagination.info
9
+ Since: 1/26/12
10
Email: mat@lipeimagination.info
11
12
*/
21
function form( $instance ) {
22
require( 'advanced-sidebar-menu.js' );
23
?>
24
+
25
+
26
+
27
+ <p> Include Parent Page <input id="<?php echo $this->get_field_name('include_parent'); ?>"
28
+ name="<?php echo $this->get_field_name('include_parent'); ?>" type="checkbox" value="checked"
29
<?php echo $instance['include_parent']; ?>/></p>
30
+
31
+
32
<p> Include Parent Even With No Children<input id="<?php echo $this->get_field_name('include_childless_parent'); ?>"
33
+ name="<?php echo $this->get_field_name('include_childless_parent'); ?>" type="checkbox" value="checked"
34
<?php echo $instance['include_childless_parent']; ?>/></p>
35
+
36
+ <p> Use Built in Styling <input id="<?php echo $this->get_field_name('css'); ?>"
37
+ name="<?php echo $this->get_field_name('css'); ?>" type="checkbox" value="checked"
38
+ <?php echo $instance['css']; ?>/></p>
39
+
40
+ <p> Pages to Exclude, Comma Separated:<input id="<?php echo $this->get_field_name('exclude'); ?>"
41
name="<?php echo $this->get_field_name('exclude'); ?>" type="text" value="<?php echo $instance['exclude']; ?>"/></p>
42
+
43
+ <p> Always Display Child Pages <input id="<?php echo $this->get_field_name('display_all'); ?>"
44
+ name="<?php echo $this->get_field_name('display_all'); ?>" type="checkbox" value="checked"
45
onclick="javascript:reveal_element( 'levels-<?php echo $this->get_field_name('levels'); ?>' )"
46
<?php echo $instance['display_all']; ?>/></p>
47
+
48
+ <span id="levels-<?php echo $this->get_field_name('levels'); ?>" style="<?php
49
if( $instance['display_all'] == checked ){
50
echo 'display:block';
51
} else {
52
echo 'display:none';
53
+ } ?>">
54
+ <p> Levels to Display <select id="<?php echo $this->get_field_name('levels'); ?>"
55
name="<?php echo $this->get_field_name('levels'); ?>">
56
+ <?php
57
for( $i= 1; $i<6; $i++ ){
58
if( $i == $instance['levels'] ){
59
echo '<option value="'.$i.'" selected>'.$i.'</option>';
60
} else {
61
echo '<option value="'.$i.'">'.$i.'</option>';
62
}
63
+ }
64
echo '</select></p></span>';
65
}
66
74
$instance['exclude'] = strip_tags($new_instance['exclude']);
75
$instance['display_all'] = strip_tags($new_instance['display_all']);
76
$instance['levels'] = strip_tags($new_instance['levels']);
77
+ $instance['css'] = strip_tags($new_instance['css']);
78
return $instance;
79
}
80
98
global $wpdb;
99
global $p;
100
global $post;
101
+
102
#-- Create a usable array of the excluded pages
103
$exclude = explode(',', $instance['exclude']);
104
+
105
+
106
#-- if the post has parrents
107
if($post->ancestors){
108
+
109
$parent = $wpdb->get_var( "SELECT post_parent from wp_posts WHERE ID=".$post->ID );
110
+
111
//--- If there is a parent of the post set $p to it and check if there is a parent as well
112
while($parent != FALSE){
113
$p = $parent;
114
$parent = $wpdb->get_var( "SELECT post_parent from wp_posts WHERE ID=".$parent);
115
}
116
+
117
} else {
118
#--------- If this is the parent ------------------------------------------------
119
$p = $post->ID;
120
}
121
+
122
#-- Makes this work with all table prefixes
123
#-- Added 1/22/12
124
global $table_prefix;
125
+
126
127
$result = $wpdb->get_results( "SELECT ID FROM ".$table_prefix."posts WHERE post_parent = $p AND post_type='page' Order by menu_order" );
128
+
129
#---- if there are no children do not display the parent unless it is check to do so
130
if($result != false || $instance['include_childless_parent'] == 'checked' ){
131
+
132
+ if( $instance['css'] == 'checked' ){
133
+ include( plugin_dir_path(__FILE__).'sidebar-menu.css' );
134
+ }
135
+
136
+ //Start the menu
137
echo '<div id="'.$args['widget_id'].'" class="advanced-sidebar-menu widget">';
138
+
139
+
140
#-- if the checkbox to include parent is checked
141
if( $instance['include_parent'] == 'checked' ){
142
+ echo '<ul class="parent-sidebar-menu" >';
143
+
144
$parent_toggle = TRUE;
145
+
146
+ #-- If the page is not excluded from the menu
147
+ if( !in_array($p, $exclude) ){
148
#-- list the parent page
149
wp_list_pages("sort_column=menu_order&title_li=&echo=1&depth=1&include=".$p);
150
}
151
+
152
}
153
}
154
155
//=----------------------------------- makes the Child Pages list -----------------------------------------
156
+
157
//If there are children start the Child Sidebar Menu
158
if( $result != FALSE ){
159
echo '<ul class="child-sidebar-menu">';
160
+
161
#-- If they want all the pages displayed always
162
if( $instance['display_all'] == 'checked' ){
163
wp_list_pages("sort_column=menu_order&title_li=&echo=1&child_of=".$p."&depth=".$instance['levels']."&exclude=".$instance['exclude']);
164
} else {
165
+
166
#-- Display children of current page's parent only
167
foreach($result as $pID){
168
+
169
#-- If the page is not in the excluded ones
170
if( !in_array($pID->ID, $exclude) ){
171
#--echo the current page from the $result
172
wp_list_pages("sort_column=menu_order&title_li=&echo=1&depth=1&include=".$pID->ID);
173
}
174
+
175
#-- if the link that was just listed is the current page we are on
176
if($pID->ID == $post->ID or $pID->ID == $post->post_parent or @in_array($pID->ID, $post->ancestors) ){
177
+
178
$kids = $wpdb->get_results( "SELECT ID FROM ".$table_prefix."posts WHERE post_parent = ".$pID->ID." AND post_type='page' " );
179
if( $kids != FALSE ){
180
+
181
#-- Create a new menu with all the children under it
182
echo '<ul class="grandchild-sidebar-menu">';
183
184
wp_list_pages("sort_column=menu_order&title_li=&echo=1&exclude=".$instance['exclude']."&depth=3&child_of=".$pID->ID);
185
+
186
echo '</ul>';
187
}
188
}
189
}
190
}
191
+
192
#-- Close the First Level menu
193
echo '</ul><!-- End child-sidebar-menu -->';
194
+
195
}
196
#-- If there was a menu close it off
197
if($result != false || $instance['include_childless_parent'] == 'checked' ){
198
+
199
+ if( $instance['include_parent'] == 'checked' ) {
200
+ echo '<ul>';
201
+ }
202
+ echo '</div><!-- end of very-custom-menu -->';
203
}
204
+
205
} #== /widget()
206
+
207
} #== /Class
readme.txt CHANGED
@@ -3,9 +3,9 @@ Contributors: Mat Lipe
3
Donate link: http://lipeimagination.info/contact/
4
Tags: menus, sidebar menu, heirchy
5
Requires at least: 3.1
6
- Tested up to: 3.2.1
7
- Stable tag: 2.0.1
8
- Version: 2.0.1
9
10
== Description ==
11
@@ -48,6 +48,9 @@ You may want to use something like margins to set the levels apart.
48
49
== Changelog ==
50
51
= 2.0 =
52
* Brought back the ability to exclude pages with support for excluding single pages from the menu.
53
* Added the ability to display all levels of child pages always.
@@ -79,7 +82,7 @@ You may want to use something like margins to set the levels apart.
79
80
81
== Screenshots ==
82
- 1. The widget Menu as of 2.0
83
84
== Upgrade Notice ==
85
3
Donate link: http://lipeimagination.info/contact/
4
Tags: menus, sidebar menu, heirchy
5
Requires at least: 3.1
6
+ Tested up to: 3.3.1
7
+ Stable tag: 2.1
8
+ Version: 2.1
9
10
== Description ==
11
48
49
== Changelog ==
50
51
+ = 2.1 =
52
+ * Added default syling.
53
+
54
= 2.0 =
55
* Brought back the ability to exclude pages with support for excluding single pages from the menu.
56
* Added the ability to display all levels of child pages always.
82
83
84
== Screenshots ==
85
+ 1. The widget Menu as of 2.0.
86
87
== Upgrade Notice ==
88
screenshot-1.PNG CHANGED
Binary file
sidebar-menu.css ADDED
@@ -0,0 +1,39 @@
1
+ <style type="text/css" >
2
+
3
+ .advanced-sidebar-menu ul li a{
4
+ font-weight: bold;
5
+ font-size: 130%;
6
+ text-decoration: none;
7
+ }
8
+
9
+ .advanced-sidebar-menu ul li a:hover{
10
+ text-decoration: underline;
11
+ }
12
+
13
+ .advanced-sidebar-menu ul ul li a{
14
+ font-weight: normal;
15
+ font-size: 100%;
16
+ }
17
+
18
+ .advanced-sidebar-menu ul{
19
+ margin: 0 0 0 18px;
20
+ list-style: none;
21
+ list-style-type: none;
22
+ }
23
+
24
+ .advanced-sidebar-menu ul li{
25
+ list-style:none;
26
+ list-style-type: none;
27
+
28
+ }
29
+
30
+ .advanced-sidebar-menu li.current_page_item{
31
+ list-style-type: disc;
32
+ }
33
+
34
+ .advanced-sidebar-menu li.current_page_item a{
35
+ font-weight: bold;
36
+ }
37
+
38
+
39
+ </style>