Если пользовательский тип сообщения

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

if (is_single ()) {
     //код здесь
 }

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

83 голоса | спросил Adam Thompson 11 Jpm1000000pmTue, 11 Jan 2011 19:54:26 +030011 2011, 19:54:26

6 ответов


109

Вот вы: get_post_type () , а затем if ('book '== get_post_type ()) ... согласно условные теги> Тип сообщения в Codex.

ответил Szymon Skulimowski 11 Jpm1000000pmTue, 11 Jan 2011 20:12:48 +030011 2011, 20:12:48
141
if (is_singular ('book')) {
    //условный контент /код
}

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

if (is_singular (array ('newspaper', 'book'))) {
    //условный контент /код
}

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

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

ответил Mark Rummel 12 J0000006Europe/Moscow 2012, 20:41:05
23

Для всех, кто ищет это, добавьте это в свой functions.php, и вы можете иметь функциональность внутри или снаружи цикла:

function is_post_type ($ type) {
    глобальный $ wp_query;
    if ($ type == get_post_type ($ wp_query-> post-> ID)) возвращает true;
    return false;
}

, чтобы теперь вы могли использовать следующее:

if (is_single () & & is_post_type ('post_type')) {
  //работа магии
}
ответил Mild Fuzz 6 J000000Wednesday11 2011, 17:41:05
20

Чтобы проверить, является ли пост любым настраиваемым типом сообщения, выберите список всех не встроенных типов сообщений и проверьте, находится ли в этом списке тип post.

Как функция:

/**
 * Проверьте, является ли сообщение персонализированным типом сообщения.
 * @param mixed $ post Опубликовать объект или ID
 * @return boolean
 * /
функция is_custom_post_type ($ post = NULL)
{
    $ all_custom_post_types = get_post_types (array ('_builtin' => FALSE));

    //нет настраиваемых типов сообщений
    if (empty ($ all_custom_post_types))
        return FALSE;

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

    //не удалось обнаружить текущий тип
    if (! $ current_post_type)
        return FALSE;

    return in_array ($ current_post_type, $ custom_types);
}

Использование:

if (is_custom_post_type ())
    print 'Это настраиваемый тип сообщения!';
ответил fuxia 15 PMpMon, 15 Apr 2013 19:22:25 +040022Monday 2013, 19:22:25
7

Если по какой-либо причине у вас уже есть доступ к глобальной переменной $ post, вы можете просто использовать

if ($ post-> post_type == "ваш желаемый тип сообщения") {
}
ответил ino 2 FebruaryEurope/MoscowbSat, 02 Feb 2013 01:30:08 +0400000000amSat, 02 Feb 2013 01:30:08 +040013 2013, 01:30:08
3

Если вам нужна проверка дикой карты для всех ваших пользовательских типов сообщений:

if (! is_singular (array ('page', 'attachment', 'post'))) {
    //echo 'Имма пользовательский тип сообщения!';
}

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

ответил kosinix 30 Jam1000000amThu, 30 Jan 2014 07:52:59 +040014 2014, 07:52:59

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132