Skip to content

Instantly share code, notes, and snippets.

@ScottPhillips
Created January 21, 2013 16:03
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save ScottPhillips/4587050 to your computer and use it in GitHub Desktop.
Save ScottPhillips/4587050 to your computer and use it in GitHub Desktop.
OOP Style Widgets for Wordpress
class Widget_Setup
{
public $widget_class = '';
public $admin_styles = array();
public $admin_scripts = array();
public $front_styles = array();
public $front_scripts = array();
public $script_defaults = array(
'handle' => '',
'src' => '',
'deps' => array(),
'version' => false,
'in_footer' => false
);
public $style_defaults = array(
'handle' => '',
'src' => '',
'deps' => array(),
'version' => false,
'media' => 'all'
);
public function __construct( $widget_class = '', $admin_styles = array(), $admin_scripts = array(), $front_styles = array(), $front_scripts = array() ) {
$this->widget_class = $widget_class;
$this->admin_styles = $admin_styles;
$this->admin_scripts = $admin_scripts;
$this->front_styles = $front_styles;
$this->front_scripts = $front_scripts;
add_action( 'admin_print_styles', array( $this, 'add_styles' ) );
add_action( 'admin_enqueue_scripts', array( $this, 'add_scripts' ) );
add_action( 'wp_enqueue_scripts', array( $this, 'add_styles' ) );
add_action( 'wp_enqueue_scripts', array( $this, 'add_scripts' ) );
if( ! empty( $this->widget_class ) )
add_action( 'widgets_init', array( $this, 'register_widget' ) );
}
public function register_widget() {
register_widget( $this->widget_class );
return true;
}
public function add_styles() {
$styles = ( is_admin() ) ?
$this->admin_styles : $this->front_styles;
if( empty( $styles ) )
return false;
foreach( $styles as $style ) {
$style = wp_parse_args( $style, $this->style_defaults );
wp_enqueue_style(
$style['handle'],
$style['src'],
$style['deps'],
$style['version'],
$style['media']
);
}
return true;
}
public function add_scripts() {
$scripts = ( is_admin() ) ?
$this->admin_scripts : $this->front_scripts;
if( empty( $scripts ) )
return false;
foreach( $scripts as $script ) {
$script = wp_parse_args( $script, $this->script_defaults );
wp_enqueue_script(
$script['handle'],
$script['src'],
$script['deps'],
$script['version'],
$script['media']
);
}
return true;
}
}
class MyAwesomeWidget extends WP_Widget {
const TEXTDOMAIN = 'widget_textdomain';
public function __construct() {
parent::__construct(
'widget-name-id',
__( 'Widget Name', self::TEXTDOMAIN ),
array(
'classname' => __CLASS__,
'description' => __( 'Short description.', self::TEXTDOMAIN )
)
);
$admin_style = array(
array( 'handle' => 'somehandle', 'src' => 'path/to/source' ),
array( 'handle' => 'someotherhandle', 'src' => 'path/to/source' ),
);
$admin_scripts = array(
array( 'handle' => 'scrpthandle', 'src' => 'path/to/source', 'deps' => array( 'jquery') ),
);
$front_styles = array(
array( 'handle' => 'frontstyle', 'src' => 'path/to/src' ),
);
new Widget_Setup( __CLASS__, $admin_style, $admin_scripts, $front_styles );
}
public function widget( $instance, $args ) {}
public function update( $new_instance, $old_instance ) {}
public function form( $instance ) {}
}
@jessicasanchezzz
Copy link

Thank you for sharing this resource! I've been diving deep into geometry dash subzero and found it incredibly insightful.

@Advika58
Copy link

Thank you very much for sharing such a nice post, it is very useful for me and everyone else story saver. I'll be checking out frequently to read your new post, so it's unmissable to keep up.

@hydrashocker
Copy link

Widget_Setup.php organizes the management of styles and scripts for WordPress widgets, ensuring a streamlined approach for both admin and front-end display. This enhancement enhances widget performance by reducing unnecessary overhead and improving loading speed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment