File: /home/ondernemer/public_html/wp-content/themes/dt-the7/inc/widgets/blog-posts/blog-posts.php
<?php
/**
* Blog posts widget.
*
* @package vogue
* @since 1.0.0
*/
// File Security Check
if ( ! defined( 'ABSPATH' ) ) { exit; }
/* Load the widget */
add_action( 'widgets_init', array( 'Presscore_Inc_Widgets_BlogPosts', 'presscore_register_widget' ) );
class Presscore_Inc_Widgets_BlogPosts extends WP_Widget {
/* Widget defaults */
public static $widget_defaults = array(
'title' => '',
'order' => 'DESC',
'orderby' => 'date',
'select' => 'all',
'show' => 6,
'cats' => array(),
'round_images' => true,
'thumbnails' => true,
'show_excerpts' => false,
'images_dimensions' => array( 'w' => 40, 'h' => 40 )
);
/* Widget setup */
function __construct() {
/* Widget settings. */
$widget_ops = array( 'description' => _x( 'Blog posts', 'widget', 'the7mk2' ) );
/* Create the widget. */
parent::__construct(
'presscore-blog-posts',
DT_WIDGET_PREFIX . _x( 'Blog posts', 'widget', 'the7mk2' ),
$widget_ops
);
}
/**
* Display the widget.
*
* @param array $args Display arguments including 'before_title', 'after_title',
* 'before_widget', and 'after_widget'.
* @param array $instance The settings for the particular instance of the widget.
*/
public function widget( $args, $instance ) {
extract( $args );
$instance = wp_parse_args( (array) $instance, self::$widget_defaults );
/* Our variables from the widget settings. */
$title = apply_filters( 'widget_title', $instance['title'] );
$terms = empty( $instance['cats'] ) ? [ 0 ] : (array) $instance['cats'];
$html = '';
if ( $terms ) {
$attachments_data = presscore_get_related_posts(
[
'exclude_current' => false,
'cats' => $terms,
'select' => $instance['select'],
'post_type' => 'post',
'taxonomy' => 'category',
'field' => 'term_id',
'args' => [
'posts_per_page' => $instance['show'],
'orderby' => $instance['orderby'],
'order' => $instance['order'],
],
]
);
if ( $attachments_data ) {
$posts_list = $this->get_posts_html_list(
$attachments_data,
[
'show_images' => (bool) $instance['thumbnails'],
'show_excerpts' => (bool) $instance['show_excerpts'],
'image_dimensions' => $instance['images_dimensions'],
]
);
foreach ( $posts_list as $p ) {
$html .= sprintf( '<li>%s</li>', $p );
}
$html = '<ul class="recent-posts' . ( $instance['round_images'] ? ' round-images' : '' ) . '">' . $html . '</ul>';
}
}
echo $before_widget;
if ( $title ) {
echo $before_title . esc_html( $title ) . $after_title;
}
echo $html;
echo $after_widget;
}
/* Update the widget settings */
function update( $new_instance, $old_instance ) {
$instance = $old_instance;
$instance['title'] = strip_tags($new_instance['title']);
$instance['order'] = esc_attr($new_instance['order']);
$instance['orderby'] = esc_attr($new_instance['orderby']);
$instance['show'] = intval($new_instance['show']);
$instance['select'] = in_array( $new_instance['select'], array('all', 'only', 'except') ) ? $new_instance['select'] : 'all';
$instance['cats'] = (array) $new_instance['cats'];
if ( empty($instance['cats']) ) { $instance['select'] = 'all'; }
$instance['thumbnails'] = absint($new_instance['thumbnails']);
$instance['round_images'] = absint($new_instance['round_images']);
$instance['show_excerpts'] = absint($new_instance['show_excerpts']);
$instance['images_dimensions'] = array_map( 'absint', $new_instance['images_dimensions'] );
return $instance;
}
/**
* Displays the widget settings controls on the widget panel.
* Make use of the get_field_id() and get_field_name() function
* when creating your form elements. This handles the confusing stuff.
*/
function form( $instance ) {
/* Set up some default widget settings. */
$instance = wp_parse_args( (array) $instance, self::$widget_defaults );
$terms = get_terms( 'category', array(
'hide_empty' => 1,
'hierarchical' => false
) );
$orderby_list = array(
'ID' => _x( 'Order by ID', 'widget', 'the7mk2' ),
'author' => _x( 'Order by author', 'widget', 'the7mk2' ),
'title' => _x( 'Order by title', 'widget', 'the7mk2' ),
'date' => _x( 'Order by date', 'widget', 'the7mk2' ),
'modified' => _x( 'Order by modified', 'widget', 'the7mk2' ),
'rand' => _x( 'Order by rand', 'widget', 'the7mk2' ),
'menu_order'=> _x( 'Order by menu', 'widget', 'the7mk2' )
);
?>
<p>
<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _ex('Title:', 'widget', 'the7mk2'); ?></label>
<input type="text" id="<?php echo $this->get_field_id( 'title' ); ?>" class="widefat" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo esc_attr($instance['title']); ?>" />
</p>
<p>
<strong><?php _ex('Category:', 'admin', 'the7mk2'); ?></strong><br />
<?php if( !is_wp_error($terms) ): ?>
<div class="dt-widget-switcher">
<label><input type="radio" name="<?php echo $this->get_field_name( 'select' ); ?>" value="all" <?php checked($instance['select'], 'all'); ?> /><?php _ex('All', 'widget', 'the7mk2'); ?></label>
<label><input type="radio" name="<?php echo $this->get_field_name( 'select' ); ?>" value="only" <?php checked($instance['select'], 'only'); ?> /><?php _ex('Only', 'widget', 'the7mk2'); ?></label>
<label><input type="radio" name="<?php echo $this->get_field_name( 'select' ); ?>" value="except" <?php checked($instance['select'], 'except'); ?> /><?php _ex('Except', 'widget', 'the7mk2'); ?></label>
</div>
<div class="hide-if-js">
<?php foreach( $terms as $term ): ?>
<input id="<?php echo $this->get_field_id($term->term_id); ?>" type="checkbox" name="<?php echo $this->get_field_name('cats'); ?>[]" value="<?php echo $term->term_id; ?>" <?php checked( in_array($term->term_id, $instance['cats']) ); ?> />
<label for="<?php echo $this->get_field_id($term->term_id); ?>"><?php echo $term->name; ?></label><br />
<?php endforeach; ?>
</div>
<?php endif; ?>
</p>
<p>
<label for="<?php echo $this->get_field_id( 'show' ); ?>"><?php _ex('Number of posts:', 'widget', 'the7mk2'); ?></label>
<input id="<?php echo $this->get_field_id( 'show' ); ?>" name="<?php echo $this->get_field_name( 'show' ); ?>" value="<?php echo esc_attr($instance['show']); ?>" size="2" maxlength="2" />
</p>
<p>
<label for="<?php echo $this->get_field_id( 'orderby' ); ?>"><?php _ex('Sort by:', 'widget', 'the7mk2'); ?></label>
<select id="<?php echo $this->get_field_id( 'orderby' ); ?>" name="<?php echo $this->get_field_name( 'orderby' ); ?>">
<?php foreach( $orderby_list as $value=>$name ): ?>
<option value="<?php echo $value; ?>" <?php selected( $instance['orderby'], $value ); ?>><?php echo $name; ?></option>
<?php endforeach; ?>
</select>
</p>
</p>
<label>
<input name="<?php echo $this->get_field_name( 'order' ); ?>" value="ASC" type="radio" <?php checked( $instance['order'], 'ASC' ); ?> /><?php _ex('Ascending', 'widget', 'the7mk2'); ?>
</label>
<label>
<input name="<?php echo $this->get_field_name( 'order' ); ?>" value="DESC" type="radio" <?php checked( $instance['order'], 'DESC' ); ?> /><?php _ex('Descending', 'widget', 'the7mk2'); ?>
</label>
</p>
<p>
<label for="<?php echo $this->get_field_id( 'thumbnails' ); ?>"><?php _ex('Show featured images', 'widget', 'the7mk2'); ?></label>
<input type="checkbox" id="<?php echo $this->get_field_id( 'thumbnails' ); ?>" name="<?php echo $this->get_field_name( 'thumbnails' ); ?>" value="1" <?php checked($instance['thumbnails']); ?> />
</p>
<p>
<label for="<?php echo $this->get_field_id( 'round_images' ); ?>"><?php _ex('Make images round', 'widget', 'the7mk2'); ?></label>
<input type="checkbox" for="<?php echo $this->get_field_id( 'round_images' ); ?>" name="<?php echo $this->get_field_name( 'round_images' ); ?>" value="1" <?php checked($instance['round_images']); ?> />
</p>
<p>
<label for="<?php echo $this->get_field_id( 'show_excerpts' ); ?>"><?php _ex('Show excerpts', 'widget', 'the7mk2'); ?></label>
<input type="checkbox" for="<?php echo $this->get_field_id( 'show_excerpts' ); ?>" name="<?php echo $this->get_field_name( 'show_excerpts' ); ?>" value="1" <?php checked($instance['show_excerpts']); ?> />
</p>
<p>
<label for="<?php echo $this->get_field_id( 'images_dimensions' ); ?>"><?php _ex('Featured images proportions:', 'widget', 'the7mk2'); ?>
<input type="text" size="3" name="<?php echo $this->get_field_name( 'images_dimensions' ); ?>[w]" value="<?php echo esc_attr( $instance['images_dimensions']['w'] ); ?>" /><span>x</span>
<input type="text" size="3" name="<?php echo $this->get_field_name( 'images_dimensions' ); ?>[h]" value="<?php echo esc_attr( $instance['images_dimensions']['h'] ); ?>" /><span><?php _ex( 'in px', 'widget', 'the7mk2' ); ?></span>
</p>
<div style="clear: both;"></div>
<?php
}
/**
* Just a quick copy of presscore_get_posts_small_list.
*
* @see presscore_get_posts_small_list
*
* @param array $attachments_data Attachnets data.
* @param array $options List options.
*
* @return array
*/
protected function get_posts_html_list( $attachments_data, $options = [] ) {
if ( empty( $attachments_data ) ) {
return [];
}
$options = wp_parse_args(
$options,
[
'links_rel' => '',
'show_images' => true,
'show_excerpts' => false,
'image_dimensions' => [
'w' => 60,
'h' => 60,
],
]
);
$image_args = [
'img_class' => '',
'class' => 'alignleft post-rollover',
'custom' => $options['links_rel'],
'options' => [
'w' => $options['image_dimensions']['w'],
'h' => $options['image_dimensions']['h'],
'z' => true,
],
'echo' => false,
];
$articles = [];
presscore_remove_masonry_lazy_load_attrs();
foreach ( $attachments_data as $data ) {
$current_post = null;
if ( isset( $data['parent_id'] ) ) {
$current_post = get_post( $data['parent_id'] );
}
$permalink = esc_url( $data['permalink'] );
$attachment_args = [
'href' => $permalink,
'img_meta' => [ $data['full'], $data['width'], $data['height'] ],
'img_id' => empty( $data['ID'] ) ? 0 : $data['ID'],
'echo' => false,
'custom' => 'aria-label="' . esc_attr__( 'Post image', 'the7mk2' ) . '"',
'wrap' => '<a %CLASS% %HREF% %CUSTOM%><img %IMG_CLASS% %SRC% %SIZE% %ALT% /></a>',
];
// Show something if there is no title.
if ( empty( $data['title'] ) ) {
$data['title'] = __( 'No title', 'the7mk2' );
}
$class = '';
if ( ! empty( $data['parent_id'] ) ) {
$class = 'post-format-standard';
if ( empty( $data['ID'] ) ) {
$attachment_args['wrap'] = '<a class="' . esc_attr( $image_args['class'] . ' no-avatar' ) . '" %HREF% %TITLE% style="width:' . (int) $options['image_dimensions']['w'] . 'px; height: ' . (int) $options['image_dimensions']['h'] . 'px;" %CUSTOM%></a>';
$attachment_args['img_meta'] = [ '', 0, 0 ];
$attachment_args['options'] = false;
}
}
$article = '<article class="' . esc_attr( $class ) . '">';
if ( $options['show_images'] ) {
$article .= sprintf(
'<div class="mini-post-img">%s</div>',
dt_get_thumb_img( array_merge( $image_args, $attachment_args ) )
);
}
$article .= '<div class="post-content">';
$article .= '<a href="' . $permalink . '">' . esc_html( apply_filters( 'post_title', $data['title'] ) ) . '</a>';
if ( $options['show_excerpts'] ) {
$article .= '<p>' . esc_html( $data['description'] ) . '</p>';
} else {
$article .= '<br />';
}
$article .= '<time datetime="' . get_the_date( 'c', $current_post ) . '">';
$article .= get_the_date( get_option( 'date_format' ), $current_post );
$article .= '</time>';
$article .= '</div>';
$article .= '</article>';
$articles[] = $article;
}
presscore_add_masonry_lazy_load_attrs();
return $articles;
}
public static function presscore_register_widget() {
register_widget( __CLASS__ );
}
}