Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I have a page that displays a list of all tags of my blog. Iuse this code which works fine:

<?php
$poststocount=get_tags($args);
echo '<h2>Alphabetic Index of All '</h2>';
?>

<?php
$taxonomy = 'post_tag';
$tax_terms = get_terms($taxonomy);
?>
<ul>
<?php
foreach ($tax_terms as $tax_term) {
echo '<li>' . '<a href="' . esc_attr(get_term_link($tax_term, $taxonomy)) . '" title="' . sprintf( __( "View all posts in %s" ), $tax_term->name ) . '" ' . '>' . $tax_term->name.'</a></li>';
}
?>
</ul>

Question: how can I paginate this lidt (say 40 per page). What would the code to accompish that, preferably with an option to "see all tags".

Thanks.

share|improve this question

1 Answer 1

up vote 0 down vote accepted

you could paginate your page by simply adding /page/n to the end of the URL, where n is the desired page number. creating your next/prev links will be a manual affair though. the page number will then be accessible via get_query_var('paged'). then use the number argument for get_terms to select 40 at a time, use the offset argument, which will be your page number -1 * number per page, to select the current "page" of terms:

$page = ( get_query_var('paged') ) ? get_query_var( 'paged' ) : 1;
$taxonomy = 'post_tag';
$offset = ( $page-1 ) * 40;
$args = array( 'number' => 40, 'offset' => $offset );
$tax_terms = get_terms( $taxonomy, $args );

as for viewing all, maybe append a GET var to the URL, ?showall=true, then check isset( $_GET['showall'] ) and change the number to fetch accordingly.

EDIT

here's a quick template I made to show an example. I tested it on a page on a test install with pretty permalinks, the page was 'about', so the pagination links were:

http://localhost/about/page/2/
http://localhost/about/?showall=true

if your permalinks are different, you'll have to edit the pagination section to reflect your setup.

<?php

get_header();

// if show all is set
if( isset($_GET['showall']) ):

    $args = array( 'hide_empty' => 0 );

else:
// else show paged

    $page = ( get_query_var('paged') ) ? get_query_var( 'paged' ) : 1;
    // number of tags to show per-page
    $per_page = 40;
    $offset = ( $page-1 ) * $per_page;
    $args = array( 'number' => $per_page, 'offset' => $offset, 'hide_empty' => 0 );

endif;

$taxonomy = 'post_tag';
$tax_terms = get_terms( $taxonomy, $args );


echo '<ul>';

foreach ($tax_terms as $tax_term) {
    echo '<li>' . '<a href="' . esc_attr(get_term_link($tax_term, $taxonomy)) . '" title="' . sprintf( __( "View all posts in %s" ), $tax_term->name ) . '" ' . '>' . $tax_term->name.'</a></li>';
}

echo '</ul>';


// pagination
// if showall isn't set
if( !isset($_GET['showall']) ):

    $total_terms = wp_count_terms( 'post_tag' );
    $pages = ceil($total_terms/$per_page);

    // if there's more than one page
    if( $pages > 1 ):
        echo '<ul>';

        for ($pagecount=1; $pagecount <= $pages; $pagecount++):
            echo '<li><a href="'.get_permalink().'page/'.$pagecount.'/">'.$pagecount.'</a></li>';
        endfor;

        echo '</ul>';

        // link to show all
        echo '<a href="'.get_permalink().'?showall=true">show all</a>';
    endif;

else:
// showall is set, show link to get back to paged mode

    echo '<a href="'.get_permalink().'">show paged</a>';

endif;


get_footer();

?>
share|improve this answer
    
thanks for the reply. I can't seem to make it work. Where and how exactly I am to use your code? –  Tara Jul 6 '11 at 0:15
    
I still trying make it work but no luck. Where and how exactly I am to use your code? –  Tara Jul 23 '11 at 17:44
    
@t-p - see the edited answer. –  Milo Jul 23 '11 at 18:35
    
excellent! It workss! Please help me with this: on top of the tag list, there is this tag named "Example". I have no idea where its coming from. I don't have "Example" tag and as such when I click on it I get "not found". How to can I get rid of it from the list? thanks for your time and help. –  Tara Jul 23 '11 at 23:58
    
I have sorted out. thanks Milo –  Tara Jul 24 '11 at 2:12

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.