setup();
$this->init();
}
/**
* Initial setup.
*
* @since 1.0
*/
function setup() {
$support = get_theme_support( 'footer-widgets' );
if ( empty( $support ) ) {
return;
}
if ( absint( $support[0] ) < 1 ) {
return;
}
$this->max_widgets = absint( $support[0] );
$this->active_widgets = $this->get_number_of_active_widgets();
}
/**
* Initialize hooks.
*
* @since 1.0
*/
function init() {
if ( $this->max_widgets < 1 ) {
return;
}
// Register footer widgets.
add_action( 'widgets_init', array( $this, 'footer_widgets_init' ), 22 );
if ( $this->active_widgets > 0 ) {
// Add footer widgets in front end.
add_action( $this->theme_prefix . '_footer_start_action', array( $this, 'add_footer_widgets' ), 20 );
}
}
/**
* Register footer widgets.
*
* @since 1.0
*/
function footer_widgets_init() {
for ( $i = 1; $i <= $this->max_widgets; $i++ ) {
register_sidebar( array(
'name' => sprintf( __( 'Footer Widget %d', 'corpobrand' ), $i ),
'id' => sprintf( 'footer-%d', $i ),
'before_widget' => '',
'before_title' => '
',
) );
}
}
/**
* Returns number of active footer widgets.
*
* @since 1.0
*
* @return int Number of active widgets.
*/
private function get_number_of_active_widgets() {
$count = 0;
for ( $i = 1; $i <= $this->max_widgets; $i++ ) {
if ( is_active_sidebar( 'footer-' . $i ) ) {
$count++;
}
}
return $count;
}
/**
* Add footer widgets content in front end.
*
* @since 1.0
*/
function add_footer_widgets() {
$flag_apply_footer_widgets_content = apply_filters( $this->theme_prefix . '_filter_footer_widgets', true );
if ( true !== $flag_apply_footer_widgets_content ) {
return false;
}
$args = array(
'container' => 'div',
'before' => '',
'after' => '
',
);
$footer_widgets_content = $this->get_footer_widgets_content( $args );
echo $footer_widgets_content;
}
/**
* Returns all active footer widgets number in array.
*
* @since 1.0
*
* @return array Active widgets
*/
function all_active_widgets() {
$arr = array();
for ( $i = 1; $i <= $this->max_widgets ; $i++ ) {
if ( is_active_sidebar( 'footer-' . $i ) ) {
$arr[] = $i;
}
}
return $arr;
}
/**
* Returns footer widget contents.
*
* @since 1.0
*
* @param array $args Footer widget arguments.
*/
function get_footer_widgets_content( $args ) {
$number = $this->active_widgets;
$all_active_widgets = $this->all_active_widgets();
// Default arguments.
$args = wp_parse_args( (array) $args, array(
'container' => 'div',
'container_class' => $this->custom_footer_widget_class( 'footer-widgets-area' ),
'container_style' => '',
'container_id' => '',
'wrap_class' => 'column-wrapper',
'before' => '',
'after' => '',
) );
$args = apply_filters( $this->theme_prefix . '_filter_footer_widgets_args', $args );
ob_start();
$container_open = '';
$container_close = '';
if ( ! empty( $args['container_class'] ) || ! empty( $args['container_id'] ) ) {
$container_open = sprintf(
'<%s %s %s %s>',
$args['container'],
( $args['container_class'] ) ? 'class="' . $args['container_class'] . '"':'',
( $args['container_id'] ) ? 'id="' . $args['container_id'] . '"':'',
( $args['container_style'] ) ? 'style="' . esc_attr( $args['container_style'] ) . '"':''
);
}
if ( ! empty( $args['container_class'] ) || ! empty( $args['container_id'] ) ) {
$container_close = sprintf(
'%s>',
$args['container']
);
}
echo $container_open;
echo $args['before'];
for ( $i = 1; $i <= $number; $i++ ) {
if ( isset( $all_active_widgets[ $i - 1 ] ) ) {
$div_classes = $args['wrap_class'];
$div_classes = trim( $div_classes );
echo '';
$sidebar_name = 'footer-' . $all_active_widgets[ $i - 1 ];
dynamic_sidebar( $sidebar_name );
echo '
';
}
} // End for loop.
echo $args['after'];
echo $container_close;
$output = ob_get_contents();
ob_end_clean();
return $output;
}
/**
* Add custom class in widgets.
*
* @since 1.0
*
* @param string $input Class for footer widget column.
*/
function custom_footer_widget_class( $input ) {
$footer_widgets_number = $this->active_widgets;
$input .= ' column-' . $footer_widgets_number;
return $input;
}
}
// Initialize.
$corpobrand_footer_widgets = new Corpobrand_Footer_Widgets();