使用WP_QUERY()显示几个特定页面

时间:2013-12-27 作者:drake035

我想显示“著名”和“mschief”页面。

使用此代码,WP\\u query()不会返回任何结果:

$args = array(
\'post_type\' => \'page\',
\'pagename\' => \'famous,mschief\',
\'posts_per_page\' => 3
);
此代码返回以下两个页面之一:

$args = array(
\'post_type\' => \'page\',
\'pagename=famous,mschief\',
);
此代码正确返回2页:

$args = array(
\'post_type\' => \'page\',
\'pagename=famous,mschief\',
\'posts_per_page\' => 3
);
为什么第一段代码(对我来说唯一正确的代码)不起作用?为什么其他两个产生这些结果?

6 个回复
SO网友:Milo

如果在运行这些查询之后查看查询对象,您将看到这些示例都没有执行您认为它们正在执行的操作。第一个问题是不能混合查询字符串和数组参数,第二个问题是pagename 只能用于加载单个页面。

在这篇文章中,你在pagename. 假设这是一个拼写错误,问题如上所述-它正在寻找一个带有slug的页面famousmschief

$args = array(
\'post_type\' => \'page\',
\'pagename => \'famous,mschief\',
\'posts_per_page\' => 3
);
在这一次中,pagename 被忽略,它只是使用默认的每页帖子数值(看起来是1)查询最近的页面。

$args = array(
\'post_type\' => \'page\',
\'pagename=famous,mschief\',
);
在这一期中,与上一期相同,但您正在加载更多页面,因此它只加载最近的三个页面:

$args = array(
\'post_type\' => \'page\',
\'pagename=famous,mschief\',
\'posts_per_page\' => 3
);
如果要查询多个页面,请使用post__in 参数和页面ID:

$args = array(
    \'post_type\' => \'page\',
    \'post__in\' => array( 23,42 )
);

SO网友:birgire

Thepost_name__in 属性

从WordPress 4.4开始,我们可以使用post_name__in 的属性WP_Query 班查看trac记录单#33065.

Example:

$args = [
    \'post_name__in\'      => [\'famous\', \'mschief\'],
    \'post_type\'          => \'page\',
   \'ignore_sticky_posts\' => 1,
];

SO网友:hornj

对于第一行,第三行的引号不匹配。你似乎想做的是:

\'pagename\' => \'famous,mschief\',

SO网友:gmazzap

您可以使用posts_where filter

function page_names_query( $n = array() ) {
  static $pages;
  if ( is_null($pages) && ! empty($n) && is_array($n) ) {
    $pages = array_filter( array_map(\'sanitize_title\', $n) );
    if ( ! empty($pages) ) {
      // using this function itself to filter next query
      add_filter(\'posts_where\', __FUNCTION__, 999 ); 
      return new WP_Query(\'post_type=page\'); // return the filtered query
    } else { // no valid page names passed
      $pages = NULL;
      return new WP_Query(\'p=-1\'); // return a WP_Query with no posts
    }
  } elseif( current_filter() === \'posts_where\' && ! empty($pages) && is_string($n) ) {
    $w = \' AND post_name IN (\';
    global $wpdb;
    foreach ( $pages as $page ) { $w .= $wpdb->prepare(\'%s,\', $page); }
    $pages = NULL; // reset static variable
    remove_filter(\'posts_where\', __FUNCTION__, 999 ); // remove filter
    return $n . rtrim($w, \',\') . \')\';
  }
}
之后你可以这样使用它

$query =  page_names_query( array(\'famous\',\'mschief\') ); // return a WP_Query

if ( $query->have_posts() ) : while( $query->have_posts() ) : $query->the_post();

// your loop here

endwhile; endif;
wp_reset_post_data();

SO网友:Brad Dalton

你的问题需要澄清。我猜你指的是2篇文章,而不是2页。

您可以在子主题函数中使用此PHP代码。php文件,用于按帖子ID显示帖子。

add_action( \'pre_get_posts\', \'wpsites_display_specific_posts_home_page\' );

function wpsites_display_specific_posts_home_page( $query ) {

if( $query->is_main_query() && $query->is_home() ) {

    $query->set( \'post__in\', array( 007, 008 ) );

    }
}
此代码将仅在主页循环中显示ID为007和008的帖子。如果您使用的是静态发件人页面,则此代码将根据您的阅读设置在您的帖子页面上工作。

使用i.d更好,因为即使你更换弹头,它们也保持不变。

SO网友:Mazgour Aziz

使用以下内容将类别添加到页面:

function wpc_cat_pages() {
    register_taxonomy_for_object_type(\'category\', \'page\');
}
add_action(\'init\', \'wpc_cat_pages\');
并将其显示为:

$args = array(
        \'post_type\' => \'page\',
        \'category\' => \'categori\',
        \'posts_per_page\' => \'number post\'
);

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post