我正在寻找一种测试帖子是否为自定义帖子类型的方法。例如,在边栏中,我可以这样输入代码:

 if ( is_single() ) {
     // Code here
 }


我只想对自定义帖子类型进行代码测试。

#1 楼

在这里,您是:get_post_type(),然后是if ( 'book' == get_post_type() ) ...,根据条件标签> Codex中的帖子类型。

评论


is_singular()更加紧凑条件标签>单个页面,单个帖子或附件

–稀有
2011年1月11日19:17

@Rarst这仅适用于CPT的单个帖子模板。 get_post_type()是采用更广泛方法的正确方法。 (例如:在搜索页面上)

–amarinediary
12月26日20:40

#2 楼

if ( is_singular( 'book' ) ) {
    // conditional content/code
}


当查看自定义帖子类型的帖子:true时,上面是book。自定义帖子类型中的一种:truenewspaper

这些和更多条件标签可以在此处查看。

#3 楼

要测试帖子是否为任何自定义帖子类型,请获取所有非内置帖子类型的列表,并测试该帖子类型是否在该列表中。

作为功能:

/**
 * Check if a post is a custom post type.
 * @param  mixed $post Post object or ID
 * @return boolean
 */
function is_custom_post_type( $post = NULL )
{
    $all_custom_post_types = get_post_types( array ( '_builtin' => FALSE ) );

    // there are no custom post types
    if ( empty ( $all_custom_post_types ) )
        return FALSE;

    $custom_types      = array_keys( $all_custom_post_types );
    $current_post_type = get_post_type( $post );

    // could not detect current type
    if ( ! $current_post_type )
        return FALSE;

    return in_array( $current_post_type, $custom_types );
}


用法:

if ( is_custom_post_type() )
    print 'This is a custom post type!';


评论


这应该是公认的答案。

– aalaap
18年3月21日在13:33

#4 楼

将其添加到您的functions.php中,就可以在循环内部或外部使用该功能:

function is_post_type($type){
    global $wp_query;
    if($type == get_post_type($wp_query->post->ID)) 
        return true;
    return false;
}


,因此您现在可以使用以下功能:

if (is_single() && is_post_type('post_type')){
    // Work magic
}


评论


谢谢,这非常有用!但这应该是:if(is_single()&& is_post_type('post_type')){//工作魔术}结束符不见了……。问候很多,埃塞尔

–user10462
2011年11月21日在14:23

这已经停止为其他人工作了吗?我已经使用了很长时间了,但是突然这对我来说不再起作用。但是,使用不带全局$ wp_query的相同方法始终可以:if('post-type'== get_post_type()){}

– Turtledropbomb
17年1月13日在13:39



is_post_type()已贬值。

– Lisa Cerilli
17年12月21日在12:23

#5 楼

如果由于某种原因您已经可以访问全局变量$ post,则可以简单地使用

if ($post->post_type == "your desired post type") {
}


#6 楼

如果要对所有自定义帖子类型使用通配符检查:

if( ! is_singular( array('page', 'attachment', 'post') ) ){
    // echo 'Imma custom post type!';
}


这样,您无需知道自定义帖子的名称。即使以后更改自定义帖子的名称,该代码也仍然有效。