我已经安装了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;?>
#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' );
}
}
评论
这是一个相当老的答案-但要明确一点,这不是您应该这样做的方法。它几乎不可避免地会导致404和许多其他问题。请参阅@kaiser的答案或这篇文章,了解为什么不应该使用query_posts()
–斯蒂芬·哈里斯(Stephen Harris)
13年5月28日在13:24