home *** CD-ROM | disk | FTP | other *** search
/ HTML Examples / WP.iso / wordpress / wp-includes / widgets / class-wp-widget-recent-comments.php < prev    next >
Encoding:
PHP Script  |  2017-10-02  |  5.7 KB  |  175 lines

  1. <?php
  2. /**
  3.  * Widget API: WP_Widget_Recent_Comments class
  4.  *
  5.  * @package WordPress
  6.  * @subpackage Widgets
  7.  * @since 4.4.0
  8.  */
  9.  
  10. /**
  11.  * Core class used to implement a Recent Comments widget.
  12.  *
  13.  * @since 2.8.0
  14.  *
  15.  * @see WP_Widget
  16.  */
  17. class WP_Widget_Recent_Comments extends WP_Widget {
  18.  
  19.     /**
  20.      * Sets up a new Recent Comments widget instance.
  21.      *
  22.      * @since 2.8.0
  23.      */
  24.     public function __construct() {
  25.         $widget_ops = array(
  26.             'classname' => 'widget_recent_comments',
  27.             'description' => __( 'Your site’s most recent comments.' ),
  28.             'customize_selective_refresh' => true,
  29.         );
  30.         parent::__construct( 'recent-comments', __( 'Recent Comments' ), $widget_ops );
  31.         $this->alt_option_name = 'widget_recent_comments';
  32.  
  33.         if ( is_active_widget( false, false, $this->id_base ) || is_customize_preview() ) {
  34.             add_action( 'wp_head', array( $this, 'recent_comments_style' ) );
  35.         }
  36.     }
  37.  
  38.      /**
  39.      * Outputs the default styles for the Recent Comments widget.
  40.      *
  41.      * @since 2.8.0
  42.      */
  43.     public function recent_comments_style() {
  44.         /**
  45.          * Filters the Recent Comments default widget styles.
  46.          *
  47.          * @since 3.1.0
  48.          *
  49.          * @param bool   $active  Whether the widget is active. Default true.
  50.          * @param string $id_base The widget ID.
  51.          */
  52.         if ( ! current_theme_supports( 'widgets' ) // Temp hack #14876
  53.             || ! apply_filters( 'show_recent_comments_widget_style', true, $this->id_base ) )
  54.             return;
  55.         ?>
  56.         <style type="text/css">.recentcomments a{display:inline !important;padding:0 !important;margin:0 !important;}</style>
  57.         <?php
  58.     }
  59.  
  60.     /**
  61.      * Outputs the content for the current Recent Comments widget instance.
  62.      *
  63.      * @since 2.8.0
  64.      *
  65.      * @param array $args     Display arguments including 'before_title', 'after_title',
  66.      *                        'before_widget', and 'after_widget'.
  67.      * @param array $instance Settings for the current Recent Comments widget instance.
  68.      */
  69.     public function widget( $args, $instance ) {
  70.         if ( ! isset( $args['widget_id'] ) )
  71.             $args['widget_id'] = $this->id;
  72.  
  73.         $output = '';
  74.  
  75.         $title = ( ! empty( $instance['title'] ) ) ? $instance['title'] : __( 'Recent Comments' );
  76.  
  77.         /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
  78.         $title = apply_filters( 'widget_title', $title, $instance, $this->id_base );
  79.  
  80.         $number = ( ! empty( $instance['number'] ) ) ? absint( $instance['number'] ) : 5;
  81.         if ( ! $number )
  82.             $number = 5;
  83.  
  84.         /**
  85.          * Filters the arguments for the Recent Comments widget.
  86.          *
  87.          * @since 3.4.0
  88.          * @since 4.9.0 Added the `$instance` parameter.
  89.          *
  90.          * @see WP_Comment_Query::query() for information on accepted arguments.
  91.          *
  92.          * @param array $comment_args An array of arguments used to retrieve the recent comments.
  93.          * @param array $instance     Array of settings for the current widget.
  94.          */
  95.         $comments = get_comments( apply_filters( 'widget_comments_args', array(
  96.             'number'      => $number,
  97.             'status'      => 'approve',
  98.             'post_status' => 'publish'
  99.         ), $instance ) );
  100.  
  101.         $output .= $args['before_widget'];
  102.         if ( $title ) {
  103.             $output .= $args['before_title'] . $title . $args['after_title'];
  104.         }
  105.  
  106.         $output .= '<ul id="recentcomments">';
  107.         if ( is_array( $comments ) && $comments ) {
  108.             // Prime cache for associated posts. (Prime post term cache if we need it for permalinks.)
  109.             $post_ids = array_unique( wp_list_pluck( $comments, 'comment_post_ID' ) );
  110.             _prime_post_caches( $post_ids, strpos( get_option( 'permalink_structure' ), '%category%' ), false );
  111.  
  112.             foreach ( (array) $comments as $comment ) {
  113.                 $output .= '<li class="recentcomments">';
  114.                 /* translators: comments widget: 1: comment author, 2: post link */
  115.                 $output .= sprintf( _x( '%1$s on %2$s', 'widgets' ),
  116.                     '<span class="comment-author-link">' . get_comment_author_link( $comment ) . '</span>',
  117.                     '<a href="' . esc_url( get_comment_link( $comment ) ) . '">' . get_the_title( $comment->comment_post_ID ) . '</a>'
  118.                 );
  119.                 $output .= '</li>';
  120.             }
  121.         }
  122.         $output .= '</ul>';
  123.         $output .= $args['after_widget'];
  124.  
  125.         echo $output;
  126.     }
  127.  
  128.     /**
  129.      * Handles updating settings for the current Recent Comments widget instance.
  130.      *
  131.      * @since 2.8.0
  132.      *
  133.      * @param array $new_instance New settings for this instance as input by the user via
  134.      *                            WP_Widget::form().
  135.      * @param array $old_instance Old settings for this instance.
  136.      * @return array Updated settings to save.
  137.      */
  138.     public function update( $new_instance, $old_instance ) {
  139.         $instance = $old_instance;
  140.         $instance['title'] = sanitize_text_field( $new_instance['title'] );
  141.         $instance['number'] = absint( $new_instance['number'] );
  142.         return $instance;
  143.     }
  144.  
  145.     /**
  146.      * Outputs the settings form for the Recent Comments widget.
  147.      *
  148.      * @since 2.8.0
  149.      *
  150.      * @param array $instance Current settings.
  151.      */
  152.     public function form( $instance ) {
  153.         $title = isset( $instance['title'] ) ? $instance['title'] : '';
  154.         $number = isset( $instance['number'] ) ? absint( $instance['number'] ) : 5;
  155.         ?>
  156.         <p><label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label>
  157.         <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>
  158.  
  159.         <p><label for="<?php echo $this->get_field_id( 'number' ); ?>"><?php _e( 'Number of comments to show:' ); ?></label>
  160.         <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>
  161.         <?php
  162.     }
  163.  
  164.     /**
  165.      * Flushes the Recent Comments widget cache.
  166.      *
  167.      * @since 2.8.0
  168.      *
  169.      * @deprecated 4.4.0 Fragment caching was removed in favor of split queries.
  170.      */
  171.     public function flush_widget_cache() {
  172.         _deprecated_function( __METHOD__, '4.4.0' );
  173.     }
  174. }
  175.