Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- class Widget_Recent_Comments extends WP_Widget
- {
- /**
- * Widget_Recent_Comments with pre_get_posts filter.
- *
- * @see WP_Widget::__construct()
- */
- function __construct()
- {
- unregister_widget('WP_Widget_Recent_Posts');
- $widget_ops = array(
- 'classname' => 'widget_recent_comments',
- 'description' => __('Your site’s most recent comments.') . ' filtrés',
- 'classname' => 'widget_recent_comments',
- 'customize_selective_refresh' => true,
- );
- parent::__construct(false, __('Recent Comments') . ' filtrés', $widget_ops);
- $this->alt_option_name = 'widget_recent_comments';
- }
- public function recent_comments_style()
- {
- if (
- !current_theme_supports('widgets') || !apply_filters('show_recent_comments_widget_style', true, $this->id_base)
- ) {
- return;
- }
- $type_attr = current_theme_supports('html5', 'style') ? '' : ' type="text/css"';
- printf(
- '<style%s>.recentcomments a{display:inline !important;padding:0 !important;margin:0 !important;}</style>',
- $type_attr
- );
- }
- /**
- * The widget's HTML output.
- */
- function widget($args, $instance)
- {
- static $first_instance = true;
- if (!isset($args['widget_id'])) {
- $args['widget_id'] = $this->id;
- }
- $output = '';
- $title = (!empty($instance['title'])) ? $instance['title'] : __('Recent Comments');
- /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
- $title = apply_filters('widget_title', $title, $instance, $this->id_base);
- $number = (!empty($instance['number'])) ? absint($instance['number']) : 5;
- if (!$number) {
- $number = 5;
- }
- /* checkbox $instance['filter'] */
- $filter = (!empty($instance['filter'])) ? true : false;
- if($filter === true) {
- $URR = new UserRoleRestrict;
- /**
- * array of roles
- * $posts_filter = ['public', 'subscriber', ... , 'administrator'];
- *
- */
- $posts_filter = $URR->get_filter($URR->my_capabilities());
- $comments = get_comments(
- apply_filters(
- 'widget_comments_args',
- array(
- 'number' => $number,
- 'status' => 'approve',
- 'post_status' => 'publish',
- 'meta_query' => array(
- 'meta_key' => 'target',
- 'meta_value' => $posts_filter,
- ),
- ),
- $instance
- )
- );
- }
- else {
- $comments = get_comments(
- /**
- * Filters the arguments for the Recent Comments widget.
- *
- * @since 3.4.0
- * @since 4.9.0 Added the `$instance` parameter.
- *
- * @see WP_Comment_Query::query() for information on accepted arguments.
- *
- * @param array $comment_args An array of arguments used to retrieve the recent comments.
- * @param array $instance Array of settings for the current widget.
- */
- apply_filters(
- 'widget_comments_args',
- array(
- 'number' => $number,
- 'status' => 'approve',
- 'post_status' => 'publish',
- ),
- $instance
- )
- );
- }
- $output .= $args['before_widget'];
- if ($title) {
- $output .= $args['before_title'] . $title . $args['after_title'];
- }
- $recent_comments_id = ($first_instance) ? 'recentcomments' : "recentcomments-{$this->number}";
- $first_instance = false;
- $output .= '<ul id="' . esc_attr($recent_comments_id) . '">';
- if (is_array($comments) && $comments) {
- // Prime cache for associated posts. (Prime post term cache if we need it for permalinks.)
- $post_ids = array_unique(wp_list_pluck($comments, 'comment_post_ID'));
- _prime_post_caches($post_ids, strpos(get_option('permalink_structure'), '%category%'), false);
- foreach ((array) $comments as $comment) {
- $output .= '<li class="recentcomments">';
- $output .= sprintf(
- /* translators: Comments widget. 1: Comment author, 2: Post link. */
- _x('%1$s', 'widgets'),
- '<a href="' . esc_url(get_comment_link($comment)) . '">' . get_the_title($comment->comment_post_ID) . '</a>'
- );
- $output .= '</li>';
- }
- }
- $output .= '</ul>';
- $output .= $args['after_widget'];
- echo $output;
- }
- /**
- * The widget update handler.
- *
- * @see WP_Widget::update()
- *
- * @param array $new_instance The new instance of the widget.
- * @param array $old_instance The old instance of the widget.
- * @return array The updated instance of the widget.
- */
- function update($new_instance, $old_instance)
- {
- $instance = $old_instance;
- $instance['title'] = sanitize_text_field($new_instance['title']);
- $instance['number'] = absint($new_instance['number']);
- $instance['filter'] = absint($new_instance['filter']);
- return $instance;
- }
- /**
- * Output the admin widget options form HTML.
- *
- * @param array $instance The current widget settings.
- * @return string The HTML markup for the form.
- */
- function form($instance)
- {
- $title = isset($instance['title']) ? $instance['title'] : '';
- $number = isset($instance['number']) ? absint($instance['number']) : 5;
- $filter = isset($instance['filter']) ? $instance['filter'] : false;
- ?>
- <p><label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:'); ?></label>
- <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($title); ?>" /></p>
- <p><label for="<?php echo $this->get_field_id('number'); ?>"><?php _e('Number of comments to show:'); ?></label>
- <input class="tiny-text" id="<?php echo $this->get_field_id('number'); ?>" name="<?php echo $this->get_field_name('number'); ?>" type="number" step="1" min="1" value="<?php echo $number; ?>" size="3" /></p>
- <p><input <?php checked($filter, true)?> class="checkbox" type="checkbox" id="<?php echo $this->get_field_name('filter'); ?>" name="<?php echo $this->get_field_name('filter'); ?>" value="1">
- <label for="<?php echo $this->get_field_id('filter'); ?>"><?php _e('Filter'); ?></label></p>
- <?php
- }
- public function flush_widget_cache()
- {
- _deprecated_function(__METHOD__, '4.4.0');
- }
- } // end of Class
- /**
- * Register the new widget.
- *
- * @see 'widgets_init'
- */
- add_action('widgets_init', 'Widget_Recent_Comments');
- function Widget_Recent_Comments()
- {
- register_widget('Widget_Recent_Comments');
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement