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

时间:2011-01-11 作者:Adam Thompson

我正在寻找一种方法来测试一篇文章是否是自定义的文章类型。例如,在边栏中,我可以输入如下代码:

 if ( is_single() ) {
     // Code here
 }
我只想对自定义帖子类型进行代码测试。

8 个回复
最合适的回答,由SO网友:Szymon Skulimowski 整理而成

给您:get_post_type() 然后if ( \'book\' == get_post_type() ) ... 根据Conditional Tags > A Post Type 在法典中。

SO网友:Mark Rummel

if ( is_singular( \'book\' ) ) {
    // conditional content/code
}
以上是true 查看自定义帖子类型的帖子时:book.

if ( is_singular( array( \'newspaper\', \'book\' ) ) ) {
    //  conditional content/code
}
以上是true 查看自定义帖子类型的帖子时:newspaperbook.

这些和更多条件标记can be viewed here.

SO网友:Mild Fuzz

将此添加到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
}

SO网友:fuxia

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

作为一种功能:

/**
 * 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!\';

SO网友:ino

如果出于任何原因,您已经有权访问全局变量$post,只需使用

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

SO网友:kosinix

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

if( ! is_singular( array(\'page\', \'attachment\', \'post\') ) ){
    // echo \'Imma custom post type!\';
}
这样,您就不需要知道自定义帖子的名称。此外,即使稍后更改自定义帖子的名称,代码仍然有效。

SO网友:Jodyshop

要在函数中轻松确定$post\\u类型,需要首先调用全局post var,下面是一个示例:

function the_views() {
global $post;

if ($post->post_type == "game") {
   $span = \'<span class="fa-gamepad">\';
  } else { // Regular post
    $span = \'<span class="fa-eye">\';
  }
}

SO网友:Djordje Sajlovic

我已经阅读了所有的答案,它们都是有用的,但最简单的是,你可以用它来检查帖子是标准的还是定制的,你可以选择:

is_singular(\'post\') or !is_singular(\'post\') 
第一个表达式用于标准帖子,第二个表达式用于任何自定义帖子。

我希望它能帮助别人。

结束

相关推荐