Displaying Numeric Pagination vs. Previous and Next Links in WordPress?

By default, WordPress shows previous and next links when content is split onto different pages. Is there a way to get it to use proper pagination (with numbers), perhaps with a plugin?

Solutions Collecting From Web of "Displaying Numeric Pagination vs. Previous and Next Links in WordPress?"

Add to Functions.php

/* Numeric Pagination ********************************************/

function numeric_pagination ($pageCount = 9, $query = null) {

    if ($query == null) {
        global $wp_query;
        $query = $wp_query;
    }

    if ($query->max_num_pages <= 1) {
        return;
    }

    $pageStart = 1;
    $paged = $query->query_vars['paged'];

    // set current page if on the first page
    if ($paged == null) {
        $paged = 1;
    }

    // work out if page start is halfway through the current visible pages and if so move it accordingly
    if ($paged > floor($pageCount / 2)) {
        $pageStart = $paged - floor($pageCount / 2);
    }

    if ($pageStart < 1) {
        $pageStart = 1;
    }

    // make sure page start is
    if ($pageStart + $pageCount > $query->max_num_pages) {
        $pageCount = $query->max_num_pages - $pageStart;
    }

?>
    <div id="archive_pagination">
<?php
    if ($paged != 1) {
?>
    <a href="<?php echo get_pagenum_link(1); ?>" class="numbered page-number-first"><span>&lsaquo; <?php _e('<< First', 'global'); ?></span></a>
<?php
    }
    // first page is not visible...
    if ($pageStart > 1) {
        //echo 'previous';
    }
    for ($p = $pageStart; $p <= $pageStart + $pageCount; $p ++) {
        if ($p == $paged) {
?>
        <span class="numbered page-number-<?php echo $p; ?> current-numeric-page"><?php echo $p; ?></span>
<?php } else { ?>
        <a href="<?php echo get_pagenum_link($p); ?>" class="numbered page-number-<?php echo $p; ?>"><span><?php echo $p; ?></span></a>

<?php
        }
    }
    // last page is not visible
    if ($pageStart + $pageCount < $query->max_num_pages) {
        //echo "last";
    }
    if ($paged != $query->max_num_pages) {
?>
        <a href="<?php echo get_pagenum_link($query->max_num_pages); ?>" class="numbered page-number-last"><span><?php _e('>> Last', 'global'); ?> &rsaquo;</span></a>
<?php } ?>

    </div>

<?php } ?>

Before The Loop

<?php
$page = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts("showposts=6&paged=$page");
?>

After The Loop Between endwhile and else

<?php numeric_pagination(); ?>