Как проверить, является ли сообщение пользовательским типом сообщения?

104

Я ищу способ проверить, является ли сообщение пользовательским типом сообщения. Например, например, на боковой панели, которую я могу вставить в код, например:

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

Я хочу тестирование кода только для пользовательского типа сообщения.

Адам Томпсон
источник

Ответы:

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

Выше trueпри просмотре сообщения пользовательского почтового типа: book.

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

Выше trueпри просмотре сообщения пользовательских типов сообщений: newspaperили book.

Эти и другие условные теги можно посмотреть здесь .

Марк Руммель
источник
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
}
Мягкий пух
источник
Спасибо, это очень полезно! Но так и должно быть: if (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!';
}

Таким образом, вам не нужно знать название вашего поста. Кроме того, код по-прежнему работает, даже если вы измените название своего пользовательского поста позже.

kosinix
источник