获取除某些之外的所有自定义帖子类型...

时间:2013-02-09 作者:Philipp

我从几小时前就开始堆积,我确信这并没有那么复杂。我想把所有自定义的帖子类型都放进这个

$posts = query_posts( $query_string.\'post_type=POST-TYPE1,POST-TYPE2,POST-TYPE3&post_status=publish&posts_per_page=-1&\' );
我知道有这个功能:$post_types=get_post_types(\'\',\'names\');我想排除一些帖子类型。E、 g.“投资组合”。

那么,如何才能获得$posts 寻找所有重要的类型?!

非常感谢!!

菲利普

2 个回复
SO网友:Max Yudin

以下代码生成用作参数的数组。

<?php
// Excluded CPTs. You can expand the list.
$exclude_cpts = array(
    \'portfolio\'
);
// Builtin types needed.
$builtin = array(
    \'post\',
    \'page\',
    \'attachment\'
);
// All CPTs.
$cpts = get_post_types( array(
    \'public\'   => true,
    \'_builtin\' => false
) );
// remove Excluded CPTs from All CPTs.
foreach($exclude_cpts as $exclude_cpt)
    unset($cpts[$exclude_cpt]);
// Merge Builtin types and \'important\' CPTs to resulting array to use as argument.
$post_types = array_merge($builtin, $cpts);
我的建议是使用WP_Query 而不是query_posts. 看见When should you use WP_Query vs query_posts() vs get_posts()?.

SO网友:kaiser

基本上是wp_filter_object_list() 调用指定names 作为输出和and 作为操作员。因为你无法区分portfolio 剩下的是对象数据,您必须手动取消设置。

$cpts = get_post_types( array(
    \'show_in_nav_menus\' => false
) );
unset( $cpts[\'portfolio\'] );
foreach ( $cpts as $cpt )
    $r[] = get_post_type_object( $cpt );

printf(
     \'<pre>%s</pre><br /><pre>%s</pre>\'
     // The names only
    ,var_export( $cpts, true )
     // The full post type objects
    ,var_export( $r, true )
);

结束