繁体   English   中英

wordpress query_posts替代

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM