Using WordPress ‘get_post_type_archive_link()’ PHP function

The get_post_type_archive_link() WordPress PHP function retrieves the permalink for a post type archive.

Usage

get_post_type_archive_link($post_type);

Example: get_post_type_archive_link(‘movies’) will return the archive link for the ‘movies’ post type.

Parameters

  • $post_type (string) – Required. The post type for which you want to get the archive link.

More information

See WordPress Developer Resources: get_post_type_archive_link()

Note: If get_post_type_archive_link() does not work or returns false, double check if you have included the argument has_archive => true when registering your post type.

Examples

Display a link to a ‘movies’ post type archive

This example shows how to display a link to the ‘movies’ post type archive.

// Display a link to the 'movies' post type archive
echo '<a href="' . get_post_type_archive_link('movies') . '">Movies Archive</a>';

Display a list of all registered post types with archive links

This example shows how to display a list of all registered post types and their archive links.

// Get all registered post types
$post_types = get_post_types(array('public' => true), 'objects');

// Loop through the post types and display archive links
foreach ($post_types as $post_type) {
    $archive_link = get_post_type_archive_link($post_type->name);
    if ($archive_link) {
        echo '<a href="' . $archive_link . '">' . $post_type->label . ' Archive</a><br>';
    }
}

Add a custom post type archive link to a menu

This example shows how to add a custom post type archive link to a WordPress menu using the wp_nav_menu_objects filter.

function add_movies_archive_link($items) {
    $archive_link = get_post_type_archive_link('movies');
    if ($archive_link) {
        $movies_archive_item = array(
            'title' => 'Movies Archive',
            'url' => $archive_link,
            'menu_order' => 1000,
            'classes' => 'movies-archive-link',
        );
        $items[] = (object) $movies_archive_item;
    }
    return $items;
}
add_filter('wp_nav_menu_objects', 'add_movies_archive_link');

Display post type archive links using a shortcode

This example shows how to create a shortcode [post_type_archive_link post_type="movies"] that displays the archive link for the specified post type.

function post_type_archive_link_shortcode($atts) {
    $atts = shortcode_atts(array('post_type' => 'post'), $atts, 'post_type_archive_link');
    $archive_link = get_post_type_archive_link($atts['post_type']);
    return $archive_link ? '<a href="' . $archive_link . '">' . ucwords($atts['post_type']) . ' Archive</a>' : '';
}
add_shortcode('post_type_archive_link', 'post_type_archive_link_shortcode');