我正在尝试使用WP_Query获取自定义帖子,但它不会仅返回自定义帖子类型的帖子,也会返回默认帖子。
我正在使用
$args = array (
'post_type' => array ('survey')
);
$sPosts = new WP_Query($args);
因此我收到了“调查”帖子以及默认帖子,我只需要它来返回“调查”帖子。
P.S。当我使用query_posts()
时,它会返回所需的结果,但只是没有使用WP_Query完成,我更喜欢使用WP_Query
而不是query_posts()
答案 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() );
}
}