Display only a single CPT

时间:2013-08-04 作者:Sonoman

我使用CptUI插件创建了一个“产品”CPT。管理方面的工作似乎很好,但我无法让前端显示出我想要的效果。

例如,我创建了一个产品,比如“吉他”和另一个叫做“鼓”。他们在管理中的永久链接显示为http://mysite.com/products/guitarshttp://mysite.com/products/drums 分别看起来很棒。然而,当我导航到其中一个URL时,我会看到一个列出所有当前产品的页面。考虑到我的single-products.php 包含以下内容:

<?php
 /*Template Name: Products Template
 */

get_header(); ?>
<div id="primary">
    <div id="content" role="main">
    <?php
    $mypost = array( \'post_type\' => \'products\', );
    $loop = new WP_Query( $mypost );
    ?>
    <?php while ( $loop->have_posts() ) : $loop->the_post();?>
        <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
            <header class="entry-header">

                <div style="float: right; margin: 10px">
                    <?php the_post_thumbnail( array( 100, 100 ) ); ?>
                </div>

                <strong>Name: </strong><?php the_title(); ?><br />

            </header>

            <div class="entry-content"><?php the_content(); ?></div>
        </article>

    <?php endwhile; ?>
    </div>
</div>
<?php wp_reset_query(); ?>
<?php get_footer(); ?>
我最想要的是http://mysite.com/products/guitars 仅显示带有吉他内容的单个CPT(鼓也是如此),然后http://mysite.com/products 显示所有产品(与当前的http://mysite.com/products/guitars). 这是否可能,如果可能,如何实现?

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

You must ensure that the post type is registered with has_archive property set to true

看看codex example, 将“书籍”替换为“产品”

function codex_custom_init() {
  $labels = array(
    \'name\' => \'Books\', \'singular_name\' => \'Book\',
    \'add_new\' => \'Add New\', \'add_new_item\' => \'Add New Book\',
    \'edit_item\' => \'Edit Book\', \'new_item\' => \'New Book\',
    \'all_items\' => \'All Books\', \'view_item\' => \'View Book\',
    \'search_items\' => \'Search Books\', \'not_found\' =>  \'No books found\',
    \'not_found_in_trash\' => \'No books found in Trash\', \'parent_item_colon\' => \'\',
    \'menu_name\' => \'Books\'
  );

  $args = array(
    \'labels\' => $labels,
    \'public\' => true,
    \'publicly_queryable\' => true,
    \'show_ui\' => true, 
    \'show_in_menu\' => true, 
    \'query_var\' => true,
    \'rewrite\' => array( \'slug\' => \'book\' ),
    \'capability_type\' => \'post\',
    \'has_archive\' => true, // <- this arg must be true
    \'hierarchical\' => false,
    \'menu_position\' => null,
    \'supports\' => array( \'title\', \'editor\', \'author\', \'thumbnail\', \'excerpt\', \'comments\' )
  ); 
  register_post_type( \'book\', $args );
}

add_action( \'init\', \'codex_custom_init\' );
如果确定“has\\u archive”为true,请在主题根目录中创建一个名为products.php 应该是这样的:

<?php get_header(); ?>
<div id="primary">
    <div id="content" role="main">
    <?php while ( have_posts() ) : the_post(); ?>
        <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
            <header class="entry-header">
                <div style="float: right; margin: 10px">
                    <?php the_post_thumbnail( array( 100, 100 ) ); ?>
                </div>
                <strong>Name: </strong><?php the_title(); ?><br />
            </header>
            <div class="entry-content"><?php the_content(); ?></div>
        </article>
    <?php endwhile; ?>
    </div>
</div>
<?php get_footer(); ?>
然后创建一个名为archive-products.php 简单地说:

get_template_part(\'products\');
然后创建一个名为single-products.php 简单地说:

// yes, exactly the same thing
get_template_part(\'products\');

结束

相关推荐

Pagination and multiple loops

对,所以我现在有一个使用css网格将页面分成三部分的页面。第三列是侧栏,前两列各有一个要显示的帖子查询,并创建一个漂亮的帖子网格(虚拟内容):http://puu.sh/2Xh9o.jpg每个循环如下所示: <?php query_posts(\'showposts=5\'); ?> <?php $posts = get_posts(\'numberposts=5&offset=0\'); foreach ($posts as $post) : start_wp()