diff --git a/classes/ComicPressNavigation.inc b/classes/ComicPressNavigation.inc index 06f8608..4dca364 100644 --- a/classes/ComicPressNavigation.inc +++ b/classes/ComicPressNavigation.inc @@ -11,32 +11,50 @@ class ComicPressNavigation { function get_post_nav($post) { $nav = array(); - - // global previous/next - foreach (array('previous', 'next') as $field) { - $nav[$field] = $this->_dbi->{"get_${field}_comic"}(null, $post); - } - - // global first/last - foreach (array('first', 'last') as $field) { - $nav[$field] = $this->_dbi->{"get_${field}_comic"}(null); - } - - if ($category = $this->_storyline->get_valid_post_category($post->ID)) { - // storyline previous/next - foreach (array('previous', 'next') as $field) { - $nav["storyline-${field}"] = $this->_dbi->{"get_${field}_comic"}($category, $post); - } - - // adjacent storyline nodes - if (is_array($valid = $this->_storyline->valid($category))) { - foreach ($valid as $field) { - $nav["storyline-chapter-${field}"] = $this->_dbi->get_first_comic($this->_storyline->{$field}($category)); - } - } - } - - return $nav; + if (is_object($post)) { + if (isset($post->ID)) { + $cache_key = 'navigation-' . $post->ID; + + if (($result = wp_cache_get($cache_key, 'comicpress')) !== false) { + foreach ($result as $key => $post_id) { + $nev[$key] = get_post($post_id); + } + } + + // global previous/next + foreach (array('previous', 'next') as $field) { + $nav[$field] = $this->_dbi->{"get_${field}_comic"}(null, $post); + } + + // global first/last + foreach (array('first', 'last') as $field) { + $nav[$field] = $this->_dbi->{"get_${field}_comic"}(null); + } + + if ($category = $this->_storyline->get_valid_post_category($post->ID)) { + // storyline previous/next + foreach (array('previous', 'next') as $field) { + $nav["storyline-${field}"] = $this->_dbi->{"get_${field}_comic"}($category, $post); + } + + // adjacent storyline nodes + if (is_array($valid = $this->_storyline->valid($category))) { + foreach ($valid as $field) { + $nav["storyline-chapter-${field}"] = $this->_dbi->get_first_comic($this->_storyline->{$field}($category)); + } + } + } + + $cache_data = array(); + foreach ($nav as $key => $output_post) { + if (!empty($output_post)) { $cache_data[$key] = $output_post->ID; } + } + + wp_cache_set($cache_key, $cache_data, 'comicpress'); + + return $nav; + } + } } } diff --git a/test/ComicPressNavigationTest.php b/test/ComicPressNavigationTest.php index fa484fc..a45c6ff 100644 --- a/test/ComicPressNavigationTest.php +++ b/test/ComicPressNavigationTest.php @@ -40,7 +40,11 @@ class ComicPressNavigationTest extends PHPUnit_Framework_TestCase { $this->nav->_dbi = $dbi; $this->nav->_storyline = $storyline; + $this->assertFalse(wp_cache_get('navigation-1', 'comicpress')); + $this->nav->get_post_nav($post); + + $this->assertTrue(wp_cache_get('navigation-1', 'comicpress') !== false); } }