我已经安装了Custom Post Type UI插件。激活此插件后,我创建了一个名为portfolio的自定义帖子类型。现在,我想在前端的投资组合页面上使用它。如何获取所有自定义帖子类型为portfolio的帖子?

#1 楼

query_posts( array( 'post_type' => array('post', 'portfolio') ) );


,它同时显示普通帖子和portfolio类型内的帖子



query_posts('post_type=portfolio');


portfolio

用作普通WP查询-阅读Codex:http://codex.wordpress.org/Function_Reference/query_posts#用法和http://codex.wordpress.org/Function_Reference/query_posts#Post_。 26_Page_Parameters

<?php 
    query_posts(array( 
        'post_type' => 'portfolio',
        'showposts' => 10 
    ) );  
?>
<?php while (have_posts()) : the_post(); ?>
        <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
        <p><?php echo get_the_excerpt(); ?></p>
<?php endwhile;?>


评论


这是一个相当老的答案-但要明确一点,这不是您应该这样做的方法。它几乎不可避免地会导致404和许多其他问题。请参阅@kaiser的答案或这篇文章,了解为什么不应该使用query_posts()

–斯蒂芬·哈里斯(Stephen Harris)
13年5月28日在13:24

#2 楼

较晚的答案是主要答案,请使用query_posts(),但绝对不要这样做。使用条件标签来确定要在哪里使用此过滤器。

快速示例

<?php
defined( 'ABSPATH' ) OR exit;
/* Plugin Name: (#6417) "Portfolio" post type in query */

add_filter( 'pre_get_posts', 'wpse_6417_portfolio_posts' );
function wpse_6417_portfolio_posts( $query )
{
    if (
        ! $query->is_main_query()
        // Here we can check for all Conditional Tags
        OR ! $query->is_archive() // For e.g.: Every archive will feature both post types
    )
        return $query;

    $query->set( 'post_type', array( 'post', 'portfolio' ) );

    return $query;
}


免责声明

上面的代码是一个插件,但可以简单地塞入主题的pre_get_posts文件中(不建议使用)。

评论


为什么不建议将其添加到功能中?当然,如果网站管理员更改了主题,则他们将需要解决如何以该新主题在主页上显示投资组合。因此,我想说的是,将其添加到函数中而不是插件中也同样有效。还是我错过了什么?

– Phill Healey
16年11月29日在20:21

@PhillHealey正如您所说,数据将是不可见的,您将不得不复制并粘贴代码。最好通过插件来对查询进行繁琐的逻辑修改,而显示和样式应保留在主题中。

– kaiser
16年11月29日在20:45

如果该代码特定于主题,则不是。

– Phill Healey
16 Dec 3'在21:27

@PhillHealey帖子类型永远不应特定于主题。

– kaiser
16 Dec 4'在18:33

好的,如果您想对绝对值进行针锋相对,那就很好。但是,说没有针对设计的代码不应推送到插件是不正确的。很多时候不合适。

– Phill Healey
16 Dec 5'在18:23

#3 楼

将此代码添加到子主题功能文件中(推荐),以将单个CPT页面添加到主循环中。

add_action( 'pre_get_posts', 'add_custom_post_types_to_loop' );

function add_custom_post_types_to_loop( $query ) {

if ( is_home() && $query->is_main_query() )

$query->set( 'post_type', array( 'post', 'portfolio' ) );

return $query;

}
Post_Types

或创建一个自定义的archive-portfolio.php页面模板,该模板仅显示您的CPT页面。仅当您尚未使用插件设置添加存档页面时,才需要执行此操作。

示例:'has_archive'=> true,

您还可以控制使用以下代码可以显示许多页面,并在归档页面上显示它们的顺序:

add_action( 'pre_get_posts', 'cpt_items' );

function cpt_items( $query ) {

if( $query->is_main_query() && !is_admin() && is_post_type_archive( 'portfolio' ) ) {

$query->set( 'posts_per_page', '8' );

$query->set( 'order', 'ASC' );

    }

}