/wp-includes/widgets/class-wp-widget-recent-posts.php

  1. <?php 
  2. /** 
  3. * Widget API: WP_Widget_Recent_Posts class 
  4. * 
  5. * @package WordPress 
  6. * @subpackage Widgets 
  7. * @since 4.4.0 
  8. */ 
  9.  
  10. /** 
  11. * Core class used to implement a Recent Posts widget. 
  12. * 
  13. * @since 2.8.0 
  14. * 
  15. * @see WP_Widget 
  16. */ 
  17. class WP_Widget_Recent_Posts extends WP_Widget { 
  18.  
  19. /** 
  20. * Sets up a new Recent Posts widget instance. 
  21. * 
  22. * @since 2.8.0 
  23. * @access public 
  24. */ 
  25. public function __construct() { 
  26. $widget_ops = array( 
  27. 'classname' => 'widget_recent_entries',  
  28. 'description' => __( 'Your site’s most recent Posts.' ),  
  29. 'customize_selective_refresh' => true,  
  30. ); 
  31. parent::__construct( 'recent-posts', __( 'Recent Posts' ), $widget_ops ); 
  32. $this->alt_option_name = 'widget_recent_entries'; 
  33.  
  34. /** 
  35. * Outputs the content for the current Recent Posts widget instance. 
  36. * 
  37. * @since 2.8.0 
  38. * @access public 
  39. * 
  40. * @param array $args Display arguments including 'before_title', 'after_title',  
  41. * 'before_widget', and 'after_widget'. 
  42. * @param array $instance Settings for the current Recent Posts widget instance. 
  43. */ 
  44. public function widget( $args, $instance ) { 
  45. if ( ! isset( $args['widget_id'] ) ) { 
  46. $args['widget_id'] = $this->id; 
  47.  
  48. $title = ( ! empty( $instance['title'] ) ) ? $instance['title'] : __( 'Recent Posts' ); 
  49.  
  50. /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */ 
  51. $title = apply_filters( 'widget_title', $title, $instance, $this->id_base ); 
  52.  
  53. $number = ( ! empty( $instance['number'] ) ) ? absint( $instance['number'] ) : 5; 
  54. if ( ! $number ) 
  55. $number = 5; 
  56. $show_date = isset( $instance['show_date'] ) ? $instance['show_date'] : false; 
  57.  
  58. /** 
  59. * Filters the arguments for the Recent Posts widget. 
  60. * 
  61. * @since 3.4.0 
  62. * 
  63. * @see WP_Query::get_posts() 
  64. * 
  65. * @param array $args An array of arguments used to retrieve the recent posts. 
  66. */ 
  67. $r = new WP_Query( apply_filters( 'widget_posts_args', array( 
  68. 'posts_per_page' => $number,  
  69. 'no_found_rows' => true,  
  70. 'post_status' => 'publish',  
  71. 'ignore_sticky_posts' => true 
  72. ) ) ); 
  73.  
  74. if ($r->have_posts()) : 
  75. ?> 
  76. <?php echo $args['before_widget']; ?> 
  77. <?php if ( $title ) { 
  78. echo $args['before_title'] . $title . $args['after_title']; 
  79. } ?> 
  80. <ul> 
  81. <?php while ( $r->have_posts() ) : $r->the_post(); ?> 
  82. <li> 
  83. <a href="<?php the_permalink(); ?>"><?php get_the_title() ? the_title() : the_ID(); ?></a> 
  84. <?php if ( $show_date ) : ?> 
  85. <span class="post-date"><?php echo get_the_date(); ?></span> 
  86. <?php endif; ?> 
  87. </li> 
  88. <?php endwhile; ?> 
  89. </ul> 
  90. <?php echo $args['after_widget']; ?> 
  91. <?php 
  92. // Reset the global $the_post as this query will have stomped on it 
  93. wp_reset_postdata(); 
  94.  
  95. endif; 
  96.  
  97. /** 
  98. * Handles updating the settings for the current Recent Posts widget instance. 
  99. * 
  100. * @since 2.8.0 
  101. * @access public 
  102. * 
  103. * @param array $new_instance New settings for this instance as input by the user via 
  104. * WP_Widget::form(). 
  105. * @param array $old_instance Old settings for this instance. 
  106. * @return array Updated settings to save. 
  107. */ 
  108. public function update( $new_instance, $old_instance ) { 
  109. $instance = $old_instance; 
  110. $instance['title'] = sanitize_text_field( $new_instance['title'] ); 
  111. $instance['number'] = (int) $new_instance['number']; 
  112. $instance['show_date'] = isset( $new_instance['show_date'] ) ? (bool) $new_instance['show_date'] : false; 
  113. return $instance; 
  114.  
  115. /** 
  116. * Outputs the settings form for the Recent Posts widget. 
  117. * 
  118. * @since 2.8.0 
  119. * @access public 
  120. * 
  121. * @param array $instance Current settings. 
  122. */ 
  123. public function form( $instance ) { 
  124. $title = isset( $instance['title'] ) ? esc_attr( $instance['title'] ) : ''; 
  125. $number = isset( $instance['number'] ) ? absint( $instance['number'] ) : 5; 
  126. $show_date = isset( $instance['show_date'] ) ? (bool) $instance['show_date'] : false; 
  127. ?> 
  128. <p><label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label> 
  129. <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo $title; ?>" /></p> 
  130.  
  131. <p><label for="<?php echo $this->get_field_id( 'number' ); ?>"><?php _e( 'Number of posts to show:' ); ?></label> 
  132. <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> 
  133.  
  134. <p><input class="checkbox" type="checkbox"<?php checked( $show_date ); ?> id="<?php echo $this->get_field_id( 'show_date' ); ?>" name="<?php echo $this->get_field_name( 'show_date' ); ?>" /> 
  135. <label for="<?php echo $this->get_field_id( 'show_date' ); ?>"><?php _e( 'Display post date?' ); ?></label></p> 
  136. <?php 
.