Vediamo com’è possibile creare una pagina di archivio personalizzata per custom post type.
Per la pagina di archivio usiamo un template di pagina. All’interno creiamo un loop personalizzato che richiama i custom post type, nel nostro esempio il custom post type si chiama classified.
<?php /** * Template Name: Classified */ $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1; ?> <?php get_header(); ?> <div id="container" class="row-inner"> <div id="content"> <?php if( ! is_paged() ) : while ( have_posts() ) : the_post(); ?> <?php if ( has_post_thumbnail() ) :?> <div class="post-preview"><?php the_post_thumbnail('large') ?></div> <?php endif; ?> <article id="post-<?php the_ID(); ?>" <?php post_class( 'clearfix' ); ?> role="article"> <div class="entry-content clearfix"> <?php the_content(); ?> </div> </article> <?php endwhile; endif; ?> <div class="archive-classified"> <?php $classified_post = new WP_Query( array( 'posts_per_page' => get_option( 'posts_per_page' ), 'post_type' => 'classified', 'paged' => $paged ) ); $max_pages = $classified_post->max_num_pages; $args = array( 'base' => get_pagenum_link() . '%_%', 'format' => 'page/%#%', 'total' => $max_pages, 'current' => $paged, 'show_all' => false, 'end_size' => 1, 'mid_size' => 2, 'prev_next' => true, 'prev_text' => __('« Annunci Nuovi'), 'next_text' => __('Annunci vecchi »'), 'type' => 'list', 'add_args' => false, 'add_fragment' => '', 'before_page_number' => '', 'after_page_number' => '' ); ?> <nav class="post-navigation" role="navigation"> <?php echo paginate_links($args ) ?> </nav> <?php if ( $classified_post->have_posts() ) : while ( $classified_post->have_posts() ) : $classified_post->the_post(); ?> <article id="post-<?php the_ID(); ?>" <?php post_class('post-entry clearfix'); ?> role="article"> <?php mnky_post_links(); ?> <header class="post-entry-header"> <h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'care' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"> <?php the_title(); ?> </a> </h2> <span class="meta-date"><?php echo get_the_date() ?></span> <span class="meta-category"><?php the_category( ', ' ) ?></span> </header><!-- .entry-header --> <div class="entry-summary"> <a href="<?php the_permalink() ?>">Vedi annuncio</a> </div> </article> <?php endwhile; else : get_template_part( 'content', 'none' ); endif; wp_reset_postdata(); ?> <nav class="post-navigation" role="navigation"> <?php echo paginate_links($args ) ?> </nav> </div> </div><!-- #content --> </div><!-- #container --> <?php get_footer(); ?>
Quando definiamo i custom post type tramite la funzione register_post_type il valore has_archive deve essere impostato a true come nel codice di esempio qui sotto.
$args = array( 'label' => __( 'Classified', 'TEXTDOMAIN' ), 'description' => __( 'Classified post', 'TEXTDOMAIN' ), 'labels' => $labels, 'supports' => array( 'title', 'editor', 'thumbnail' ), 'taxonomies' => array( 'category' ), 'hierarchical' => false, 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'menu_position' => 5, 'menu_icon' => 'dashicons-screenoptions', 'show_in_admin_bar' => true, 'show_in_nav_menus' => true, 'can_export' => true, 'has_archive' => true, 'exclude_from_search' => false, 'publicly_queryable' => true, 'rewrite' => $rewrite, 'capability_type' => 'page', 'show_in_rest' => false, ); register_post_type( 'classified', $args );
Ora basta creare un pagina, assegnare il template di pagina classified e pubblicare.