简体   繁体   中英

Archive Page for Custom Post Type

I have created a custom post type called news and added certain news. Now i want to display it in archive page. I have added the 'has_archive' => 'true' in the functions file. My archive page code is:

<?php
        $args = array('post_type'   => 'news',
                      'post_status' => 'publish');

        $news=wp_get_recent_posts($args);
    ?>
        <div class="container  mc_tb_p">
                <h1>NEWS/RELEASES</h1>
                    <?php
                        foreach ($news as $row) 
                            {
                             $id       = $row['ID'];
                             $ntitle   = $row['post_title'];
                             $ncontent = $row['post_content'];
                             $ncontent = strip_tags($ncontent);
                              if (strlen($ncontent) > 100) 
                                  {
                                    $stringCut = substr($ncontent, 0, 200).'... <a href="'.get_permalink($id).'">Read More</a>';
                                  }
                              else{
                                    $stringCut = $row['post_content'];
                                  }
                            $ndate     = $row['post_date'];
                            $trim      = new DateTime($ndate);
                            $trimdate      = $trim->format('d-m-Y');
                            // var_dump($trimdate);
                    ?>
                <div class="news_releases">
                    <a href="<?php echo get_permalink($id)?>"><h3><?php echo $ntitle?></h3></a>
                        <h5><i>Published On:&nbsp;<?php echo $trimdate?></i></h5>
                            <p><?php echo $stringCut;?></p>
                </div>
                        <?php
                        }
                        ?>

        </div>

now when i give my url:https//sitename/news ... its bringing up the single page of the 2nd news and nothing else , i have tried everything but nothing seems to work.Please help

You have two option,
1. Create a file name as " archive-{post_type}.php " in current active theme folder and use below code in that file,

<?php if ( have_posts() ) : 
            while ( have_posts() ) : the_post(); ?>    
    <!-- do stuff ... -->
    <?php   endwhile; 
        endif; ?>

REF : https://codex.wordpress.org/Post_Type_Templates

OR

2.Create custom template file and use below code,

<?php
    $loop = new WP_Query( array( 'post_type' => 'posttypename', 'paged' => $paged ) );
    if ( $loop->have_posts() ) :
        while ( $loop->have_posts() ) : $loop->the_post(); ?>
            <div class="pindex">
                <?php if ( has_post_thumbnail() ) { ?>
                    <div class="pimage">
                        <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail(); ?></a>
                    </div>
                <?php } ?>
            </div>
        <?php endwhile;
        if (  $loop->max_num_pages > 1 ) : ?>
            <div id="nav-below" class="navigation">
                <div class="nav-previous"><?php next_posts_link( __( '<span class="meta-nav">&larr;</span> Previous', 'domain' ) ); ?></div>
                <div class="nav-next"><?php previous_posts_link( __( 'Next <span class="meta-nav">&rarr;</span>', 'domain' ) ); ?></div>
            </div>
        <?php endif;
    endif;
    wp_reset_postdata();
?>

*posttypename - ypu post type name

add_action( 'init', 'create_post_type' );
function create_post_type() {
    register_post_type( 'deals',
        array(
            'labels' => array(
                'name' => __( 'Deals' ),
                'singular_name' => __( 'Deal' )
            ),
        'public' => true,
        'has_archive' => true,
        )
    );
}

=>The best way to start would be to copy the code from your theme’s archive.php file and paste it in your archive-{posttype}.php file. Then start tweaking from there. You can style this archive file to your heart’s desire. A very basic template would look like this
<?php
get_header();
if(have_posts()) : while(have_posts()) : the_post();
    the_title();
    echo '<div class="entry-content">';
    the_content();
    echo '</div>';
endwhile; endif;
get_footer();
?>

Reference : http://www.wpbeginner.com/wp-tutorials/how-to-create-a-custom-post-types-archive-page-in-wordpress/

As with most weird routing errors when using custom post types: saving the permalinks solves this problem (at least for me it did)

Just go to the settings/permalinks and click save

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM