为什么这个查询不像普通查询那样选择帖子ID?

时间:2013-03-10 作者:djb

我有一个页面模板,叫它page myblog。php,我想在其上显示一个普通循环由于以下行为,此方法不起作用:

add_action( \'pre_get_posts\', function( $query ) {
    if( $query->query[\'pagename\'] === \'myblog\' ) {
        $query->set( \'pagename\', null );
        $query->set( \'post_type\', \'post\' );
    }
});
导致生成以下SQL。

SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.post_type = \'post\'  ORDER BY wp_posts.post_date DESC 
这个查询可以工作,也就是说,如果您在SQL控制台中运行它,它确实可以找到帖子,但因为它没有显式地选择ID(我想?)我的$query->posts数组中没有任何内容。

为什么会发生这种情况?我能修一下吗?

1 个回复
SO网友:Kaung Ko

我不确定您为什么不想使用wp\\U查询?wp\\u Query是一个非常强大的函数,用于检索各种查询。首先,博客中的页面与帖子不相关,因此您不会得到您创建的页面模板的任何预定义帖子查询。

但是,有几种方法可以通过自定义查询在静态页面中显示帖子(例如query\\u posts、get\\u posts、wp\\u query)。

在这种情况下,如果不想使用wp\\u查询。请尝试使用query\\u帖子。据我所知,您只想检索原始的post类型,即“post”。不是自定义帖子类型。我说得对吗?

请在您的页面myblog中尝试以下代码。php和pls请确保您正在使用该页面的模板。

<?php
$args = array(
     \'post_type\'      => \'post\',
     \'posts_per_page\' => 5,
     \'order\'          => ASC
);
// The Query
query_posts( $args );

// The Loop
while ( have_posts() ) : the_post();
   echo \'<li>\';
   the_title();
   echo \'</li>\';
endwhile; ?>
//Reset Querywp\\u Reset\\u query();?>

我希望这能帮助你解决问题。如果您想了解有关query\\u帖子的更多信息,请访问给定的链接。祝你好运http://codex.wordpress.org/Function_Reference/query_posts

结束

相关推荐