/** * @ticket 17807 */ public function test_get_adjacent_post() { // Need some sample posts to test adjacency $post_one = self::factory()->post->create_and_get(array('post_title' => 'First', 'post_date' => '2012-01-01 12:00:00')); $post_two = self::factory()->post->create_and_get(array('post_title' => 'Second', 'post_date' => '2012-02-01 12:00:00')); $post_three = self::factory()->post->create_and_get(array('post_title' => 'Third', 'post_date' => '2012-03-01 12:00:00')); $post_four = self::factory()->post->create_and_get(array('post_title' => 'Fourth', 'post_date' => '2012-04-01 12:00:00')); // Assign some terms wp_set_object_terms($post_one->ID, 'wordpress', 'category', false); wp_set_object_terms($post_three->ID, 'wordpress', 'category', false); wp_set_object_terms($post_two->ID, 'plugins', 'post_tag', false); wp_set_object_terms($post_four->ID, 'plugins', 'post_tag', false); // Test normal post adjacency $this->go_to(get_permalink($post_two->ID)); $this->assertEquals($post_one, get_adjacent_post(false, '', true)); $this->assertEquals($post_three, get_adjacent_post(false, '', false)); $this->assertNotEquals($post_two, get_adjacent_post(false, '', true)); $this->assertNotEquals($post_two, get_adjacent_post(false, '', false)); // Test category adjacency $this->go_to(get_permalink($post_one->ID)); $this->assertEquals('', get_adjacent_post(true, '', true, 'category')); $this->assertEquals($post_three, get_adjacent_post(true, '', false, 'category')); // Test tag adjacency $this->go_to(get_permalink($post_two->ID)); $this->assertEquals('', get_adjacent_post(true, '', true, 'post_tag')); $this->assertEquals($post_four, get_adjacent_post(true, '', false, 'post_tag')); // Test normal boundary post $this->go_to(get_permalink($post_two->ID)); $this->assertEquals(array($post_one), get_boundary_post(false, '', true)); $this->assertEquals(array($post_four), get_boundary_post(false, '', false)); // Test category boundary post $this->go_to(get_permalink($post_one->ID)); $this->assertEquals(array($post_one), get_boundary_post(true, '', true, 'category')); $this->assertEquals(array($post_three), get_boundary_post(true, '', false, 'category')); // Test tag boundary post $this->go_to(get_permalink($post_two->ID)); $this->assertEquals(array($post_two), get_boundary_post(true, '', true, 'post_tag')); $this->assertEquals(array($post_four), get_boundary_post(true, '', false, 'post_tag')); }
/** * Get boundary post relational link. * * Can either be start or end post relational link. * * @since 2.8.0 * @deprecated 3.3.0 * * @param string $title Optional. Link title format. * @param bool $in_same_cat Optional. Whether link should be in a same category. * @param string $excluded_categories Optional. Excluded categories IDs. * @param bool $start Optional, default is true. Whether to display link to first or last post. * @return string */ function get_boundary_post_rel_link($title = '%title', $in_same_cat = false, $excluded_categories = '', $start = true) { _deprecated_function(__FUNCTION__, '3.3'); $posts = get_boundary_post($in_same_cat, $excluded_categories, $start); // If there is no post stop. if (empty($posts)) { return; } // Even though we limited get_posts to return only 1 item it still returns an array of objects. $post = $posts[0]; if (empty($post->post_title)) { $post->post_title = $start ? __('First Post') : __('Last Post'); } $date = mysql2date(get_option('date_format'), $post->post_date); $title = str_replace('%title', $post->post_title, $title); $title = str_replace('%date', $date, $title); $title = apply_filters('the_title', $title, $post->ID); $link = $start ? "<link rel='start' title='" : "<link rel='end' title='"; $link .= esc_attr($title); $link .= "' href='" . get_permalink($post) . "' />\n"; $boundary = $start ? 'start' : 'end'; return apply_filters("{$boundary}_post_rel_link", $link); }
</a></span> <?php } ?> <?php if (get_adjacent_post($in_same_cat = true, '', $previous = false)) { ?> <span class="next"><?php next_post_link('%link', 'Next: %title ›', true); ?> </span> <?php } else { ?> <?php $first_post = array_pop(get_boundary_post($in_same_cat = true, '', $oldest = true)); ?> <span class="next"><a href="<?php echo get_permalink($first_post); ?> ">First: <?php echo $first_post->post_title; ?> ›</a></span> <?php } ?> </div> <?php } ?>