WordPress 4.0
[autoinstalls/wordpress.git] / wp-content / themes / twentyfourteen / inc / featured-content.php
index 3f9dc411a4f519c77d2ceff0d0abf8ce556bdcdf..ccff4cace41b6766ac28809c6161fbd3c53e1558 100644 (file)
@@ -106,7 +106,7 @@ class Featured_Content {
         */
        public static function wp_loaded() {
                if ( self::get_setting( 'hide-tag' ) ) {
-                       add_filter( 'get_terms',     array( __CLASS__, 'hide_featured_term'     ), 10, 2 );
+                       add_filter( 'get_terms',     array( __CLASS__, 'hide_featured_term'     ), 10, 3 );
                        add_filter( 'get_the_terms', array( __CLASS__, 'hide_the_featured_term' ), 10, 3 );
                }
        }
@@ -151,46 +151,39 @@ class Featured_Content {
         * @return array Array of post IDs.
         */
        public static function get_featured_post_ids() {
-               // Return array of cached results if they exist.
+               // Get array of cached results if they exist.
                $featured_ids = get_transient( 'featured_content_ids' );
-               if ( ! empty( $featured_ids ) ) {
-                       return array_map( 'absint', (array) $featured_ids );
-               }
 
-               $settings = self::get_setting();
+               if ( false === $featured_ids ) {
+                       $settings = self::get_setting();
+                       $term     = get_term_by( 'name', $settings['tag-name'], 'post_tag' );
 
-               // Return sticky post ids if no tag name is set.
-               $term = get_term_by( 'name', $settings['tag-name'], 'post_tag' );
-               if ( $term ) {
-                       $tag = $term->term_id;
-               } else {
-                       return self::get_sticky_posts();
-               }
+                       if ( $term ) {
+                               // Query for featured posts.
+                               $featured_ids = get_posts( array(
+                                       'fields'           => 'ids',
+                                       'numberposts'      => self::$max_posts,
+                                       'suppress_filters' => false,
+                                       'tax_query'        => array(
+                                               array(
+                                                       'field'    => 'term_id',
+                                                       'taxonomy' => 'post_tag',
+                                                       'terms'    => $term->term_id,
+                                               ),
+                                       ),
+                               ) );
+                       }
 
-               // Query for featured posts.
-               $featured = get_posts( array(
-                       'numberposts' => self::$max_posts,
-                       'tax_query'   => array(
-                               array(
-                                       'field'    => 'term_id',
-                                       'taxonomy' => 'post_tag',
-                                       'terms'    => $tag,
-                               ),
-                       ),
-               ) );
+                       // Get sticky posts if no Featured Content exists.
+                       if ( ! $featured_ids ) {
+                               $featured_ids = self::get_sticky_posts();
+                       }
 
-               // Return array with sticky posts if no Featured Content exists.
-               if ( ! $featured ) {
-                       return self::get_sticky_posts();
+                       set_transient( 'featured_content_ids', $featured_ids );
                }
 
-               // Ensure correct format before save/return.
-               $featured_ids = wp_list_pluck( (array) $featured, 'ID' );
-               $featured_ids = array_map( 'absint', $featured_ids );
-
-               set_transient( 'featured_content_ids', $featured_ids );
-
-               return $featured_ids;
+               // Ensure correct format before return.
+               return array_map( 'absint', $featured_ids );
        }
 
        /**
@@ -203,7 +196,6 @@ class Featured_Content {
         * @return array Array of sticky posts.
         */
        public static function get_sticky_posts() {
-               $settings = self::get_setting();
                return array_slice( get_option( 'sticky_posts', array() ), 0, self::$max_posts );
        }
 
@@ -312,7 +304,7 @@ class Featured_Content {
         *
         * @uses Featured_Content::get_setting()
         */
-       public static function hide_featured_term( $terms, $taxonomies ) {
+       public static function hide_featured_term( $terms, $taxonomies, $args ) {
 
                // This filter is only appropriate on the front-end.
                if ( is_admin() ) {
@@ -329,6 +321,11 @@ class Featured_Content {
                        return $terms;
                }
 
+               // Bail if term objects are unavailable.
+               if ( 'all' != $args['fields'] ) {
+                       return $terms;
+               }
+
                $settings = self::get_setting();
                foreach( $terms as $order => $term ) {
                        if ( ( $settings['tag-id'] === $term->term_id || $settings['tag-name'] === $term->name ) && 'post_tag' === $term->taxonomy ) {