[英]wordpress query_posts alternative
我正在创建一个网站,该网站集成了使用自定义帖子类型的作品集,这是根据本教程完成的。
到目前为止,这正是我正在寻找的东西,并且除了一个小细节之外,效果都很好。 为了从新的自定义帖子类型中获取帖子,本教程的作者使用了query_posts()Codex。 因此,我的投资组合页面的顶部看起来像这样:
<?php
/* Template Name: Portfolio */
get_header();
query_posts('post_type=portfolio&posts_per_page=10');
?>
我收集到的是,它声明“从“帖子类型”投资组合中获取帖子并每页显示10条”。 我的问题是我无法从投资组合页面获取内容。 看来现在我的投资组合页面仅从自定义帖子类型中获取内容,而我不能使用:
<?php while ( have_posts() ) : the_post(); ?>
<?php the_content(); ?>
<?php endwhile; // end of the loop. ?>
从实际页面获取内容。
这是我想要做的,我已经替换了:
query_posts('post_type=portfolio&posts_per_page=10');
有:
add_action( 'pre_get_posts', 'add_my_post_types_to_query' );
function add_my_post_types_to_query( $query ) {
if ( is_page( 8 ) && $query->is_main_query() )
$query->set( 'post_type', array( 'portfolio' ) );
return $query;
}
这似乎是正确的轨道,但仍然无法正常工作。 我没有从自定义帖子类型中获取帖子。
有什么想法可以修改吗? 我仍在学习,因此对解释的清楚将不胜感激。
谢谢!
编辑pre_get_posts将替换原始查询,并且您根本没有页面内容。 如果您只想显示投资组合帖子类型的内容,而不是投资组合页面的内容,我只建议采用这种方法。
对于一般的帖子查询,建议使用WP_Query或get_posts。
http://codex.wordpress.org/Class_Reference/WP_Query
http://codex.wordpress.org/Template_Tags/get_posts
如果使用WP_Query函数,则wp_reset_postdata()会将帖子数据还原回原始数据,以便您可以获取原始页面的内容。
$args = array(
'posts_per_page' => 10,
'post_type' => 'portfolio',
);
// The Query
$the_query = new WP_Query( $args );
// The Loop
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
echo '<li>' . get_the_title() . '</li>';
}
} else {
// no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
现在,您将能够使用原始循环来显示页面内容
<?php while ( have_posts() ) : the_post(); ?>
<?php the_content(); ?>
<?php endwhile; // end of the loop. ?>
通常,我将查询内容贴在一个变量中,如下所示:
$catid = get_cat_ID('My Category Name');
$args = array(
'posts_per_page' => 5,
'orderby' => 'post_date',
'order' => 'DESC',
'post_type' => 'post',
'post_status' => 'publish',
'category' => $catid
);
$posts_array = get_posts($args);
然后,您可以像这样循环播放:
<?php foreach ($posts_array as $post) : setup_postdata($post);?>
<h1><?php the_title(); ?></h1>
<p><?php the_content(); ?></p>
<?php endforeach; ?>
最后,要访问页面内容,您可以使用变量$post
,它是由wordpress自动设置的。 无需添加任何其他代码即可访问您的页面内容。
<?php foreach( $posts as $post ) : setup_postdata($post); ?>
<h1><?php the_title(); ?></h1>
<p><?php the_content(); ?></p>
<?php endforeach; ?>
您的页面内容的foreach循环有点过大了,并且有一种更好的方法(至少很有可能),但是我还没有进一步研究它的麻烦! 虽然有效!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.