function test_ordered_by_ending_soon()
 {
     $query = Charitable_Campaigns::ordered_by_ending_soon();
     $this->assertEquals(3, $query->found_posts);
     $i = 0;
     while ($query->have_posts()) {
         $query->the_post();
         $this->assertEquals($this->campaigns_ordered_by_ending_soon[$i], get_the_ID(), sprintf('Index %d for campaigns orderd by date ending', $i));
         $i++;
     }
     $query_2 = Charitable_Campaigns::ordered_by_ending_soon(array('posts_per_page' => 1));
     $this->assertEquals(1, count($query_2->posts));
 }
 /**
  * Return campaigns to display in the widget. 
  *
  * @param 	array 	$instance
  * @return  WP_Query
  * @access  protected
  * @since   1.0.0
  */
 protected function get_widget_campaigns($instance)
 {
     $number = isset($instance['number']) ? absint($instance['number']) : 5;
     $args = array('posts_per_page' => $number);
     if (isset($instance['order']) && 'recent' == $instance['order']) {
         $args['orderby'] = 'date';
         $args['order'] = 'DESC';
         return Charitable_Campaigns::query($args);
     }
     return Charitable_Campaigns::ordered_by_ending_soon($args);
 }
 /**
  * Return campaigns to display in the campaigns shortcode. 
  *
  * @param   array   $args
  * @return  WP_Query
  * @access  public
  * @static
  * @since   1.0.0
  */
 public static function get_campaigns($args)
 {
     $query_args = array('posts_per_page' => $args['number']);
     /* Pagination */
     if (!empty($args['paged'])) {
         $query_args['paged'] = $args['paged'];
     }
     /* Set category constraint */
     if (!empty($args['category'])) {
         $query_args['tax_query'] = array(array('taxonomy' => 'campaign_category', 'field' => 'slug', 'terms' => $args['category']));
     }
     /* Set author constraint */
     if (!empty($args['creator'])) {
         $query_args['author'] = $args['creator'];
     }
     /* Only include active campaigns if flag is set */
     if (!$args['include_inactive']) {
         $query_args['meta_query'] = array('relation' => 'OR', array('key' => '_campaign_end_date', 'value' => date('Y-m-d H:i:s'), 'compare' => '>=', 'type' => 'datetime'), array('key' => '_campaign_end_date', 'value' => 0, 'compare' => '='));
     }
     if (!empty($args['exclude'])) {
         $query_args['post__not_in'] = explode(',', $args['exclude']);
     }
     /* Return campaigns, ordered by date of creation. */
     if ('post_date' == $args['orderby']) {
         $query_args['orderby'] = 'date';
         $query_args['order'] = 'DESC';
         return Charitable_Campaigns::query($query_args);
     }
     /* Return campaigns, ordered by how much money has been raised. */
     if ('popular' == $args['orderby']) {
         return Charitable_Campaigns::ordered_by_amount($query_args);
     }
     /* Return campaigns, ordered by how soon they are ending. */
     return Charitable_Campaigns::ordered_by_ending_soon($query_args);
 }