forked from scribu/wp-scb-framework
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathWidget.php
89 lines (60 loc) · 2.22 KB
/
Widget.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<?php
// Adds compatibility methods between WP_Widget and scbForms
abstract class scbWidget extends WP_Widget {
protected $defaults = array();
private static $scb_widgets = array();
static function init( $class, $file = '', $base = '' ) {
self::$scb_widgets[] = $class;
add_action( 'widgets_init', array( __CLASS__, '_scb_register' ) );
// for auto-uninstall
if ( $file && $base && class_exists( 'scbOptions' ) )
new scbOptions( "widget_$base", $file );
}
static function _scb_register() {
foreach ( self::$scb_widgets as $widget )
register_widget( $widget );
}
// A pre-filled method, for convenience
function widget( $args, $instance ) {
$instance = wp_parse_args( $instance, $this->defaults );
extract( $args );
echo $before_widget;
$title = apply_filters( 'widget_title', isset( $instance['title'] ) ? $instance['title'] : '', $instance, $this->id_base );
if ( ! empty( $title ) )
echo $before_title . $title . $after_title;
$this->content( $instance );
echo $after_widget;
}
// This is where the actual widget content goes
function content( $instance ) {}
//_____HELPER METHODS_____
// See scbForms::input()
// Allows extra parameter $args['title']
protected function input( $args, $formdata = array() ) {
// Add default class
if ( !isset( $args['extra'] ) )
$args['extra'] = 'class="regular-text"';
// Add default label position
if ( !in_array( $args['type'], array( 'checkbox', 'radio' ) ) && empty( $args['desc_pos'] ) )
$args['desc_pos'] = 'before';
// Then add prefix to names and formdata
$new_formdata = array();
foreach ( ( array ) $args['name'] as $name )
$new_formdata[$this->scb_get_field_name( $name )] = @$formdata[$name];
$new_names = array_keys( $new_formdata );
// Finally, replace the old names
if ( 1 == count( $new_names ) )
$args['name'] = $new_names[0];
else
$args['name'] = $new_names;
return scbForms::input( $args, $new_formdata );
}
//_____INTERNAL METHODS_____
private function scb_get_field_name( $name ) {
if ( $split = scbUtil::split_at( '[', $name ) )
list( $basename, $extra ) = $split;
else
return $this->get_field_name( $name );
return str_replace( '[]', '', $this->get_field_name( $basename ) ) . $extra;
}
}