get_adjacent_post_link

The timeline below displays how wordpress function get_adjacent_post_link has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 6.2

/**
 * Retrieves the adjacent post link.
 *
 * Can be either next post link or previous.
 *
 * @since 3.7.0
 *
 * @param string       $format         Link anchor format.
 * @param string       $link           Link permalink format.
 * @param bool         $in_same_term   Optional. Whether link should be in the same taxonomy term.
 *                                     Default false.
 * @param int[]|string $excluded_terms Optional. Array or comma-separated list of excluded terms IDs.
 *                                     Default empty.
 * @param bool         $previous       Optional. Whether to display link to previous or next post.
 *                                     Default true.
 * @param string       $taxonomy       Optional. Taxonomy, if `$in_same_term` is true. Default 'category'.
 * @return string The link URL of the previous or next post in relation to the current post.
 */
function get_adjacent_post_link($format, $link, $in_same_term = false, $excluded_terms = '', $previous = true, $taxonomy = 'category')
{
    if ($previous && is_attachment()) {
        $post = get_post(get_post()->post_parent);
    } else {
        $post = get_adjacent_post($in_same_term, $excluded_terms, $previous, $taxonomy);
    }
    if (!$post) {
        $output = '';
    } else {
        $title = $post->post_title;
        if (empty($post->post_title)) {
            $title = $previous ? __('Previous Post') : __('Next Post');
        }
        /** This filter is documented in wp-includes/post-template.php */
        $title = apply_filters('the_title', $title, $post->ID);
        $date = mysql2date(get_option('date_format'), $post->post_date);
        $rel = $previous ? 'prev' : 'next';
        $string = '<a href="' . get_permalink($post) . '" rel="' . $rel . '">';
        $inlink = str_replace('%title', $title, $link);
        $inlink = str_replace('%date', $date, $inlink);
        $inlink = $string . $inlink . '</a>';
        $output = str_replace('%link', $inlink, $format);
    }
    $adjacent = $previous ? 'previous' : 'next';
    /**
     * Filters the adjacent post link.
     *
     * The dynamic portion of the hook name, `$adjacent`, refers to the type
     * of adjacency, 'next' or 'previous'.
     *
     * Possible hook names include:
     *
     *  - `next_post_link`
     *  - `previous_post_link`
     *
     * @since 2.6.0
     * @since 4.2.0 Added the `$adjacent` parameter.
     *
     * @param string         $output   The adjacent post link.
     * @param string         $format   Link anchor format.
     * @param string         $link     Link permalink format.
     * @param WP_Post|string $post     The adjacent post. Empty string if no corresponding post exists.
     * @param string         $adjacent Whether the post is previous or next.
     */
    return apply_filters("{$adjacent}_post_link", $output, $format, $link, $post, $adjacent);
}

WordPress Version: 5.8

/**
 * Retrieves the adjacent post link.
 *
 * Can be either next post link or previous.
 *
 * @since 3.7.0
 *
 * @param string       $format         Link anchor format.
 * @param string       $link           Link permalink format.
 * @param bool         $in_same_term   Optional. Whether link should be in a same taxonomy term. Default false.
 * @param int[]|string $excluded_terms Optional. Array or comma-separated list of excluded terms IDs. Default empty.
 * @param bool         $previous       Optional. Whether to display link to previous or next post. Default true.
 * @param string       $taxonomy       Optional. Taxonomy, if $in_same_term is true. Default 'category'.
 * @return string The link URL of the previous or next post in relation to the current post.
 */
function get_adjacent_post_link($format, $link, $in_same_term = false, $excluded_terms = '', $previous = true, $taxonomy = 'category')
{
    if ($previous && is_attachment()) {
        $post = get_post(get_post()->post_parent);
    } else {
        $post = get_adjacent_post($in_same_term, $excluded_terms, $previous, $taxonomy);
    }
    if (!$post) {
        $output = '';
    } else {
        $title = $post->post_title;
        if (empty($post->post_title)) {
            $title = $previous ? __('Previous Post') : __('Next Post');
        }
        /** This filter is documented in wp-includes/post-template.php */
        $title = apply_filters('the_title', $title, $post->ID);
        $date = mysql2date(get_option('date_format'), $post->post_date);
        $rel = $previous ? 'prev' : 'next';
        $string = '<a href="' . get_permalink($post) . '" rel="' . $rel . '">';
        $inlink = str_replace('%title', $title, $link);
        $inlink = str_replace('%date', $date, $inlink);
        $inlink = $string . $inlink . '</a>';
        $output = str_replace('%link', $inlink, $format);
    }
    $adjacent = $previous ? 'previous' : 'next';
    /**
     * Filters the adjacent post link.
     *
     * The dynamic portion of the hook name, `$adjacent`, refers to the type
     * of adjacency, 'next' or 'previous'.
     *
     * Possible hook names include:
     *
     *  - `next_post_link`
     *  - `previous_post_link`
     *
     * @since 2.6.0
     * @since 4.2.0 Added the `$adjacent` parameter.
     *
     * @param string  $output   The adjacent post link.
     * @param string  $format   Link anchor format.
     * @param string  $link     Link permalink format.
     * @param WP_Post $post     The adjacent post.
     * @param string  $adjacent Whether the post is previous or next.
     */
    return apply_filters("{$adjacent}_post_link", $output, $format, $link, $post, $adjacent);
}

WordPress Version: 5.7

/**
 * Retrieves the adjacent post link.
 *
 * Can be either next post link or previous.
 *
 * @since 3.7.0
 *
 * @param string       $format         Link anchor format.
 * @param string       $link           Link permalink format.
 * @param bool         $in_same_term   Optional. Whether link should be in a same taxonomy term. Default false.
 * @param int[]|string $excluded_terms Optional. Array or comma-separated list of excluded terms IDs. Default empty.
 * @param bool         $previous       Optional. Whether to display link to previous or next post. Default true.
 * @param string       $taxonomy       Optional. Taxonomy, if $in_same_term is true. Default 'category'.
 * @return string The link URL of the previous or next post in relation to the current post.
 */
function get_adjacent_post_link($format, $link, $in_same_term = false, $excluded_terms = '', $previous = true, $taxonomy = 'category')
{
    if ($previous && is_attachment()) {
        $post = get_post(get_post()->post_parent);
    } else {
        $post = get_adjacent_post($in_same_term, $excluded_terms, $previous, $taxonomy);
    }
    if (!$post) {
        $output = '';
    } else {
        $title = $post->post_title;
        if (empty($post->post_title)) {
            $title = $previous ? __('Previous Post') : __('Next Post');
        }
        /** This filter is documented in wp-includes/post-template.php */
        $title = apply_filters('the_title', $title, $post->ID);
        $date = mysql2date(get_option('date_format'), $post->post_date);
        $rel = $previous ? 'prev' : 'next';
        $string = '<a href="' . get_permalink($post) . '" rel="' . $rel . '">';
        $inlink = str_replace('%title', $title, $link);
        $inlink = str_replace('%date', $date, $inlink);
        $inlink = $string . $inlink . '</a>';
        $output = str_replace('%link', $inlink, $format);
    }
    $adjacent = $previous ? 'previous' : 'next';
    /**
     * Filters the adjacent post link.
     *
     * The dynamic portion of the hook name, `$adjacent`, refers to the type
     * of adjacency, 'next' or 'previous'.
     *
     * @since 2.6.0
     * @since 4.2.0 Added the `$adjacent` parameter.
     *
     * @param string  $output   The adjacent post link.
     * @param string  $format   Link anchor format.
     * @param string  $link     Link permalink format.
     * @param WP_Post $post     The adjacent post.
     * @param string  $adjacent Whether the post is previous or next.
     */
    return apply_filters("{$adjacent}_post_link", $output, $format, $link, $post, $adjacent);
}

WordPress Version: 4.6

/**
 * Retrieves the adjacent post link.
 *
 * Can be either next post link or previous.
 *
 * @since 3.7.0
 *
 * @param string       $format         Link anchor format.
 * @param string       $link           Link permalink format.
 * @param bool         $in_same_term   Optional. Whether link should be in a same taxonomy term. Default false.
 * @param array|string $excluded_terms Optional. Array or comma-separated list of excluded terms IDs. Default empty.
 * @param bool         $previous       Optional. Whether to display link to previous or next post. Default true.
 * @param string       $taxonomy       Optional. Taxonomy, if $in_same_term is true. Default 'category'.
 * @return string The link URL of the previous or next post in relation to the current post.
 */
function get_adjacent_post_link($format, $link, $in_same_term = false, $excluded_terms = '', $previous = true, $taxonomy = 'category')
{
    if ($previous && is_attachment()) {
        $post = get_post(get_post()->post_parent);
    } else {
        $post = get_adjacent_post($in_same_term, $excluded_terms, $previous, $taxonomy);
    }
    if (!$post) {
        $output = '';
    } else {
        $title = $post->post_title;
        if (empty($post->post_title)) {
            $title = $previous ? __('Previous Post') : __('Next Post');
        }
        /** This filter is documented in wp-includes/post-template.php */
        $title = apply_filters('the_title', $title, $post->ID);
        $date = mysql2date(get_option('date_format'), $post->post_date);
        $rel = $previous ? 'prev' : 'next';
        $string = '<a href="' . get_permalink($post) . '" rel="' . $rel . '">';
        $inlink = str_replace('%title', $title, $link);
        $inlink = str_replace('%date', $date, $inlink);
        $inlink = $string . $inlink . '</a>';
        $output = str_replace('%link', $inlink, $format);
    }
    $adjacent = $previous ? 'previous' : 'next';
    /**
     * Filters the adjacent post link.
     *
     * The dynamic portion of the hook name, `$adjacent`, refers to the type
     * of adjacency, 'next' or 'previous'.
     *
     * @since 2.6.0
     * @since 4.2.0 Added the `$adjacent` parameter.
     *
     * @param string  $output   The adjacent post link.
     * @param string  $format   Link anchor format.
     * @param string  $link     Link permalink format.
     * @param WP_Post $post     The adjacent post.
     * @param string  $adjacent Whether the post is previous or next.
     */
    return apply_filters("{$adjacent}_post_link", $output, $format, $link, $post, $adjacent);
}

WordPress Version: 4.2

/**
 * Get adjacent post link.
 *
 * Can be either next post link or previous.
 *
 * @since 3.7.0
 *
 * @param string       $format         Link anchor format.
 * @param string       $link           Link permalink format.
 * @param bool         $in_same_term   Optional. Whether link should be in a same taxonomy term.
 * @param array|string $excluded_terms Optional. Array or comma-separated list of excluded terms IDs.
 * @param bool         $previous       Optional. Whether to display link to previous or next post. Default true.
 * @param string       $taxonomy       Optional. Taxonomy, if $in_same_term is true. Default 'category'.
 * @return string The link URL of the previous or next post in relation to the current post.
 */
function get_adjacent_post_link($format, $link, $in_same_term = false, $excluded_terms = '', $previous = true, $taxonomy = 'category')
{
    if ($previous && is_attachment()) {
        $post = get_post(get_post()->post_parent);
    } else {
        $post = get_adjacent_post($in_same_term, $excluded_terms, $previous, $taxonomy);
    }
    if (!$post) {
        $output = '';
    } else {
        $title = $post->post_title;
        if (empty($post->post_title)) {
            $title = $previous ? __('Previous Post') : __('Next Post');
        }
        /** This filter is documented in wp-includes/post-template.php */
        $title = apply_filters('the_title', $title, $post->ID);
        $date = mysql2date(get_option('date_format'), $post->post_date);
        $rel = $previous ? 'prev' : 'next';
        $string = '<a href="' . get_permalink($post) . '" rel="' . $rel . '">';
        $inlink = str_replace('%title', $title, $link);
        $inlink = str_replace('%date', $date, $inlink);
        $inlink = $string . $inlink . '</a>';
        $output = str_replace('%link', $inlink, $format);
    }
    $adjacent = $previous ? 'previous' : 'next';
    /**
     * Filter the adjacent post link.
     *
     * The dynamic portion of the hook name, `$adjacent`, refers to the type
     * of adjacency, 'next' or 'previous'.
     *
     * @since 2.6.0
     * @since 4.2.0 Added the `$adjacent` parameter.
     *
     * @param string  $output   The adjacent post link.
     * @param string  $format   Link anchor format.
     * @param string  $link     Link permalink format.
     * @param WP_Post $post     The adjacent post.
     * @param string  $adjacent Whether the post is previous or next.
     */
    return apply_filters("{$adjacent}_post_link", $output, $format, $link, $post, $adjacent);
}

WordPress Version: 4.1

/**
 * Get adjacent post link.
 *
 * Can be either next post link or previous.
 *
 * @since 3.7.0
 *
 * @param string       $format         Link anchor format.
 * @param string       $link           Link permalink format.
 * @param bool         $in_same_term   Optional. Whether link should be in a same taxonomy term.
 * @param array|string $excluded_terms Optional. Array or comma-separated list of excluded terms IDs.
 * @param bool         $previous       Optional. Whether to display link to previous or next post. Default true.
 * @param string       $taxonomy       Optional. Taxonomy, if $in_same_term is true. Default 'category'.
 * @return string The link URL of the previous or next post in relation to the current post.
 */
function get_adjacent_post_link($format, $link, $in_same_term = false, $excluded_terms = '', $previous = true, $taxonomy = 'category')
{
    if ($previous && is_attachment()) {
        $post = get_post(get_post()->post_parent);
    } else {
        $post = get_adjacent_post($in_same_term, $excluded_terms, $previous, $taxonomy);
    }
    if (!$post) {
        $output = '';
    } else {
        $title = $post->post_title;
        if (empty($post->post_title)) {
            $title = $previous ? __('Previous Post') : __('Next Post');
        }
        /** This filter is documented in wp-includes/post-template.php */
        $title = apply_filters('the_title', $title, $post->ID);
        $date = mysql2date(get_option('date_format'), $post->post_date);
        $rel = $previous ? 'prev' : 'next';
        $string = '<a href="' . get_permalink($post) . '" rel="' . $rel . '">';
        $inlink = str_replace('%title', $title, $link);
        $inlink = str_replace('%date', $date, $inlink);
        $inlink = $string . $inlink . '</a>';
        $output = str_replace('%link', $inlink, $format);
    }
    $adjacent = $previous ? 'previous' : 'next';
    /**
     * Filter the adjacent post link.
     *
     * The dynamic portion of the hook name, `$adjacent`, refers to the type
     * of adjacency, 'next' or 'previous'.
     *
     * @since 2.6.0
     *
     * @param string  $output The adjacent post link.
     * @param string  $format Link anchor format.
     * @param string  $link   Link permalink format.
     * @param WP_Post $post   The adjacent post.
     */
    return apply_filters("{$adjacent}_post_link", $output, $format, $link, $post);
}

WordPress Version: 4.0

/**
 * Get adjacent post link.
 *
 * Can be either next post link or previous.
 *
 * @since 3.7.0
 *
 * @param string       $format         Link anchor format.
 * @param string       $link           Link permalink format.
 * @param bool         $in_same_term   Optional. Whether link should be in a same taxonomy term.
 * @param array|string $excluded_terms Optional. Array or comma-separated list of excluded terms IDs.
 * @param bool         $previous       Optional. Whether to display link to previous or next post. Default true.
 * @param string       $taxonomy       Optional. Taxonomy, if $in_same_term is true. Default 'category'.
 * @return string
 */
function get_adjacent_post_link($format, $link, $in_same_term = false, $excluded_terms = '', $previous = true, $taxonomy = 'category')
{
    if ($previous && is_attachment()) {
        $post = get_post(get_post()->post_parent);
    } else {
        $post = get_adjacent_post($in_same_term, $excluded_terms, $previous, $taxonomy);
    }
    if (!$post) {
        $output = '';
    } else {
        $title = $post->post_title;
        if (empty($post->post_title)) {
            $title = $previous ? __('Previous Post') : __('Next Post');
        }
        /** This filter is documented in wp-includes/post-template.php */
        $title = apply_filters('the_title', $title, $post->ID);
        $date = mysql2date(get_option('date_format'), $post->post_date);
        $rel = $previous ? 'prev' : 'next';
        $string = '<a href="' . get_permalink($post) . '" rel="' . $rel . '">';
        $inlink = str_replace('%title', $title, $link);
        $inlink = str_replace('%date', $date, $inlink);
        $inlink = $string . $inlink . '</a>';
        $output = str_replace('%link', $inlink, $format);
    }
    $adjacent = $previous ? 'previous' : 'next';
    /**
     * Filter the adjacent post link.
     *
     * The dynamic portion of the hook name, $adjacent, refers to the type
     * of adjacency, 'next' or 'previous'.
     *
     * @since 2.6.0
     *
     * @param string  $output The adjacent post link.
     * @param string  $format Link anchor format.
     * @param string  $link   Link permalink format.
     * @param WP_Post $post   The adjacent post.
     */
    return apply_filters("{$adjacent}_post_link", $output, $format, $link, $post);
}

WordPress Version: 3.9

/**
 * Get adjacent post link.
 *
 * Can be either next post link or previous.
 *
 * @since 3.7.0
 *
 * @param string       $format         Link anchor format.
 * @param string       $link           Link permalink format.
 * @param bool         $in_same_term   Optional. Whether link should be in a same taxonomy term.
 * @param array|string $excluded_terms Optional. Array or comma-separated list of excluded terms IDs.
 * @param bool         $previous       Optional. Whether to display link to previous or next post. Default true.
 * @param string       $taxonomy       Optional. Taxonomy, if $in_same_term is true. Default 'category'.
 * @return string
 */
function get_adjacent_post_link($format, $link, $in_same_cat = false, $excluded_terms = '', $previous = true, $taxonomy = 'category')
{
    if ($previous && is_attachment()) {
        $post = get_post(get_post()->post_parent);
    } else {
        $post = get_adjacent_post($in_same_cat, $excluded_terms, $previous, $taxonomy);
    }
    if (!$post) {
        $output = '';
    } else {
        $title = $post->post_title;
        if (empty($post->post_title)) {
            $title = $previous ? __('Previous Post') : __('Next Post');
        }
        /** This filter is documented in wp-includes/post-template.php */
        $title = apply_filters('the_title', $title, $post->ID);
        $date = mysql2date(get_option('date_format'), $post->post_date);
        $rel = $previous ? 'prev' : 'next';
        $string = '<a href="' . get_permalink($post) . '" rel="' . $rel . '">';
        $inlink = str_replace('%title', $title, $link);
        $inlink = str_replace('%date', $date, $inlink);
        $inlink = $string . $inlink . '</a>';
        $output = str_replace('%link', $inlink, $format);
    }
    $adjacent = $previous ? 'previous' : 'next';
    /**
     * Filter the adjacent post link.
     *
     * The dynamic portion of the hook name, $adjacent, refers to the type
     * of adjacency, 'next' or 'previous'.
     *
     * @since 2.6.0
     *
     * @param string  $output The adjacent post link.
     * @param string  $format Link anchor format.
     * @param string  $link   Link permalink format.
     * @param WP_Post $post   The adjacent post.
     */
    return apply_filters("{$adjacent}_post_link", $output, $format, $link, $post);
}

WordPress Version: 3.8

/**
 * Get adjacent post link.
 *
 * Can be either next post link or previous.
 *
 * @since 3.7.0
 *
 * @param string       $format         Link anchor format.
 * @param string       $link           Link permalink format.
 * @param bool         $in_same_term   Optional. Whether link should be in a same taxonomy term.
 * @param array|string $excluded_terms Optional. Array or comma-separated list of excluded terms IDs.
 * @param bool         $previous       Optional. Whether to display link to previous or next post. Default true.
 * @param string       $taxonomy       Optional. Taxonomy, if $in_same_term is true. Default 'category'.
 * @return string
 */
function get_adjacent_post_link($format, $link, $in_same_cat = false, $excluded_terms = '', $previous = true, $taxonomy = 'category')
{
    if ($previous && is_attachment()) {
        $post = get_post(get_post()->post_parent);
    } else {
        $post = get_adjacent_post($in_same_cat, $excluded_terms, $previous, $taxonomy);
    }
    if (!$post) {
        $output = '';
    } else {
        $title = $post->post_title;
        if (empty($post->post_title)) {
            $title = $previous ? __('Previous Post') : __('Next Post');
        }
        /** This filter is documented in wp-includes/post-template.php */
        $title = apply_filters('the_title', $title, $post->ID);
        $date = mysql2date(get_option('date_format'), $post->post_date);
        $rel = $previous ? 'prev' : 'next';
        $string = '<a href="' . get_permalink($post) . '" rel="' . $rel . '">';
        $inlink = str_replace('%title', $title, $link);
        $inlink = str_replace('%date', $date, $inlink);
        $inlink = $string . $inlink . '</a>';
        $output = str_replace('%link', $inlink, $format);
    }
    $adjacent = $previous ? 'previous' : 'next';
    return apply_filters("{$adjacent}_post_link", $output, $format, $link, $post);
}

WordPress Version: 3.7

/**
 * Get adjacent post link.
 *
 * Can be either next post link or previous.
 *
 * @since 3.7.0
 *
 * @param string $format Link anchor format.
 * @param string $link Link permalink format.
 * @param bool $in_same_cat Optional. Whether link should be in a same category.
 * @param array|string $excluded_categories Optional. Array or comma-separated list of excluded category IDs.
 * @param bool $previous Optional, default is true. Whether to display link to previous or next post.
 * @return string
 */
function get_adjacent_post_link($format, $link, $in_same_cat = false, $excluded_categories = '', $previous = true)
{
    if ($previous && is_attachment()) {
        $post = get_post(get_post()->post_parent);
    } else {
        $post = get_adjacent_post($in_same_cat, $excluded_categories, $previous);
    }
    if (!$post) {
        $output = '';
    } else {
        $title = $post->post_title;
        if (empty($post->post_title)) {
            $title = $previous ? __('Previous Post') : __('Next Post');
        }
        /** This filter is documented in wp-includes/post-template.php */
        $title = apply_filters('the_title', $title, $post->ID);
        $date = mysql2date(get_option('date_format'), $post->post_date);
        $rel = $previous ? 'prev' : 'next';
        $string = '<a href="' . get_permalink($post) . '" rel="' . $rel . '">';
        $inlink = str_replace('%title', $title, $link);
        $inlink = str_replace('%date', $date, $inlink);
        $inlink = $string . $inlink . '</a>';
        $output = str_replace('%link', $inlink, $format);
    }
    $adjacent = $previous ? 'previous' : 'next';
    return apply_filters("{$adjacent}_post_link", $output, $format, $link, $post);
}