I have no doubt that Suyash Jain’s solution above is a good one, possibly even the optimal one, and certainly more elegant as a piece of programming than what I am about to propose.
However, it strikes me that there is a very simple way to add the desired elements before and after the links produced by `paginate_links:
<?php
global $wp_query;
$big = 999999999; // need an unlikely integer
$html = paginate_links( array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
//recommended for pretty permalinks, but you could use 'format' => '?paged=%#%', if you prefer
'format' => '/page/%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => $wp_query->max_num_pages
) );
//set your additional decorative elements
//mimics the default for paginate_links()
$pretext="« Previous";
$posttext="Next »";
//assuming this set of links goes at bottom of page
$pre_deco = '<div id="bottom-deco-pre-link" class="deco-links">' . $pretext . '</div>';
$post_deco = '<div id="bottom-deco-post-link" class="deco-links">' . $posttext . '</div>';
//key variable
$paged = get_query_var( 'paged' ) ? absint( get_query_var( 'paged' ) ) : 1;
//add decorative non-link to first page
if ( 1 === $paged) {
$html = $pre_deco . $html;
}
//add decorative non-link to last page
if ( $wp_query->max_num_pages == $paged ) {
$html = $html . $post_deco;
}
//may be helpful to create a larger containing div so...
echo '<div id="pagination-bottom" class="expanded-pagination">';
echo $html;
echo '</div>';
?>
You’d then copy (and modify) the CSS styling of the “real” paginate-links, and maybe add your own color-coding further signifying that the “deco” links are in fact dead.