仅使用WP_Query获取自定义帖子类型帖子

时间:2014-12-11 11:40:24

标签: wordpress

我正在尝试使用WP_Query获取自定义帖子,但它不会仅返回自定义帖子类型的帖子,也会返回默认帖子。

我正在使用

$args = array (
    'post_type' => array ('survey')
);
$sPosts = new WP_Query($args);

因此我收到了“调查”帖子以及默认帖子,我只需要它来返回“调查”帖子。

P.S。当我使用query_posts()时,它会返回所需的结果,但只是没有使用WP_Query完成,我更喜欢使用WP_Query而不是query_posts()

3 个答案:

答案 0 :(得分:0)

请这样试试......

<?php
    $new = new WP_Query('post_type=discography');
    while ($new->have_posts()) : $new->the_post();
     the_content();
    endwhile;
?>

答案 1 :(得分:0)

我相信这个自定义查询实际上应该是您的主查询,在这种情况下您不应该使用自定义查询

您遇到的问题可能是由于

  • 错误地使用pre_get_posts的某处。请注意,pre_get_posts会更改WP_Query,后端和前端的所有实例。缺乏正确的使用将打破所有查询

  • 您尚未将循环更改为新查询的对象

回到这一点,如上所述,这被认为是主要的查询,所以让我们解决这个问题。

首先要做的是删除自定义查询。完成此操作后,您只会看到正常的帖子。

我们现在将使用pre_get_posts将主查询更改为仅显示自定义帖子。将以下粘贴到您的functions.php

add_action( 'pre_get_posts', function ( $q ) {
    if( !is_admin() && $q->is_main_query() && $q->is_home() ) {
        $q->set( 'post_type', 'YOUR CPT' );
    }
});

您现在应该只在主页上看到来自您的cpt的帖子

修改

你的index.php看起来应该是这样的

if( have_posts() ) {
    while( have_posts() ) {
        the_post();

        // HTML mark up and template tags like the_title()

    }
}else{

    echo 'No posts found';

} 

答案 2 :(得分:0)

此代码可以按自定义帖子类型获取所有帖子。

wp_query是该函数可以获取自定义帖子类型的所有帖子。 wp_query需要数组,因此您可以在帖子ID中为数组指定自定义帖子类型名称

$args = array(

            'post_type' => 'address',    //custom post type
            'posts_per_page' => -1       // get all posts

         );

$query = new WP_Query( $args );

// Check that we have query results.

if ( $query->have_posts() ) {   

    // Start looping over the query results.

    while ( $query->have_posts() ) {

       $query->the_post();

       echo( get_the_title() );

    }

}