如何测试帖子是否为自定义帖子类型?


Answers:



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

以上是true查看自定义帖子类型的帖子时的信息book

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

以上是true在查看自定义帖子类型的帖子时:newspaperbook

这些和更多的条件标签可以在这里查看


27

将其添加到您的中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
}

谢谢,这非常有用!但它应该是:如果(is_single()&& is_post_type( 'post_type')){//工作魔术}结束括号缺少....很多问候,埃塞尔

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

is_post_type()已贬值。
丽莎·塞里利

23

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

作为功​​能:

/**
 * 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

10

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

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

5

如果您想要通配符检查所有自定义帖子类型:

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.