Short answer:
Try
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
Long answer:
I took a look at the paginate_links()
source code (v3.5.1) and there is this line (#)
$link = str_replace('%_%', 1 == $n ? '' : $format, $base);
that is giving you the empty first page link.
With your setup you have $base = "%_%"
and $format = "http://example.com/page/%#%/"
so this becomes:
$link = str_replace('%_%', 1 == $n ? '' : "http://example.com/page/%#%/", "%_%");
where we have two cases:
n=1: $link = str_replace('%_%', '', "%_%");
n>1: $link = str_replace('%_%', "http://example.com/page/%#%/", "%_%");
and after the replacement:
n=1: $link = '';
n>1: $link = "http://example.com/page/%#%/";
Here is an example of the output from paginate_links()
:
<ul class='page-numbers'>
<li><a class="prev page-numbers" href="http://example.com/page/2/">« Previous</a></li>
<li><a class='page-numbers' href=''>1</a></li>
<li><a class='page-numbers' href='http://example.com/page/2/'>2</a></li>
<li><span class='page-numbers current'>3</span></li>
<li><a class='page-numbers' href='http://example.com/page/4/'>4</a></li>
<li><a class='page-numbers' href='http://example.com/page/5/'>5</a></li>
<li><a class='page-numbers' href='http://example.com/page/6/'>6</a></li>
<li><a class="next page-numbers" href="http://example.com/page/4/">Next »</a></li>
</ul>
If you use instead (#):
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
then you get:
$link = str_replace('%_%', 1 == $n ? '' : "?paged=%#%", "http://example.com/page/%#%");
Since no replacement will take place
$link = "http://example.com/page/%#%";
in both cases (n=1 and n>1) and you have a non empty first page link with the output of paginate_links()
:
<ul class='page-numbers'>
<li><a class="prev page-numbers" href="http://example.com/page/2/">« Previous</a></li>
<li><a class='page-numbers' href='http://example.com/page/1/'>1</a></li>
<li><a class='page-numbers' href='http://example.com/page/2/'>2</a></li>
<li><span class='page-numbers current'>3</span></li>
<li><a class='page-numbers' href='http://example.com/page/4/'>4</a></li>
<li><a class='page-numbers' href='http://example.com/page/5/'>5</a></li>
<li><a class='page-numbers' href='http://example.com/page/6/'>6</a></li>
<li><a class="next page-numbers" href="http://example.com/page/4/">Next »</a></li>
</ul>
To have a non empty first page link it looks like $format
can be any string as long as $base
doesn't include the string "%_%"
, i.e. these should work fine:
'format' => '?paged=%#%',
'format' => 'page/%#%',
'format' => 'asdfasdfasdfasdfasdf',
If you don't use permalinks, then the example in (#) will also give you non empty first page link since
$link = str_replace('%_%', 1 == $n ? '' : "?paged=%#%", "http://example.com/?paged=%#%");
with replacements.