查询自定义帖子类型?[关闭]


16

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

Answers:


22
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;?>

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

16

后一个答案作为主要答案使用query_posts()永远不要这样做。

使用过滤器

使用pre_get_posts过滤器,然后portfolio为主要查询设置帖子类型。使用条件标签来确定要在哪里放置此过滤器。

快速范例

<?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;
}

免责声明

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


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

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

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

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

好吧,如果您想对绝对值进行针锋相对,那就很好。但是,说不应该将任何特定于设计的代码推送到插件是不正确的。很多时候不合适。
Phill Healey

4

将此代码添加到子主题功能文件中(推荐),以将单个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;

}

来源http://codex.wordpress.org/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' );

    }

}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.