get_adjacent_post

Definition:
function get_adjacent_post( $in_same_cat = false, $excluded_categories = '', $previous = true ) {}

Retrieve adjacent post.
Can either be next or previous post.

Parameters

  • bool $in_same_cat: Optional. Whether post should be in a same category.
  • array|string $excluded_categories: Optional. Array or comma-separated list of excluded category IDs.
  • bool $previous: Optional. Whether to retrieve previous post.

Return values

returns:Post object if successful. Null if global $post is not set. Empty string if no corresponding post exists.

Defined filters

  • get_{$adjacent}_post_join
    apply_filters( "get_{$adjacent}_post_join", $join, $in_same_cat, $excluded_categories )

Source code

function get_adjacent_post( $in_same_cat = false, $excluded_categories = '', $previous = true ) {

	global $post, $wpdb;



	if ( empty( $post ) )

		return null;



	$current_post_date = $post->post_date;



	$join = '';

	$posts_in_ex_cats_sql = '';

	if ( $in_same_cat || ! empty( $excluded_categories ) ) {

		$join = " INNER JOIN $wpdb->term_relationships AS tr ON p.ID = tr.object_id INNER JOIN $wpdb->term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id";



		if ( $in_same_cat ) {

			$cat_array = wp_get_object_terms($post->ID, 'category', array('fields' => 'ids'));

			$join .= " AND tt.taxonomy = 'category' AND tt.term_id IN (" . implode(',', $cat_array) . ")";

		}



		$posts_in_ex_cats_sql = "AND tt.taxonomy = 'category'";

		if ( ! empty( $excluded_categories ) ) {

			if ( ! is_array( $excluded_categories ) ) {

				// back-compat, $excluded_categories used to be IDs separated by " and "

				if ( strpos( $excluded_categories, ' and ' ) !== false ) {

					_deprecated_argument( __FUNCTION__, '3.3', sprintf( __( 'Use commas instead of %s to separate excluded categories.' ), "'and'" ) );

					$excluded_categories = explode( ' and ', $excluded_categories );

				} else {

					$excluded_categories = explode( ',', $excluded_categories );

				}

			}



			$excluded_categories = array_map( 'intval', $excluded_categories );



			if ( ! empty( $cat_array ) ) {

				$excluded_categories = array_diff($excluded_categories, $cat_array);

				$posts_in_ex_cats_sql = '';

			}



			if ( !empty($excluded_categories) ) {

				$posts_in_ex_cats_sql = " AND tt.taxonomy = 'category' AND tt.term_id NOT IN (" . implode($excluded_categories, ',') . ')';

			}

		}

	}



	$adjacent = $previous ? 'previous' : 'next';

	$op = $previous ? '<' : '>';

	$order = $previous ? 'DESC' : 'ASC';



	$join  = apply_filters( "get_{$adjacent}_post_join", $join, $in_same_cat, $excluded_categories );

1116

No comments yet... Be the first to leave a reply!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: