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

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

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

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

108
10.06.2019, 14:11
6 ответов

Пожалуйста: get_post_type() и затем if ( 'book' == get_post_type() ) ... согласно Условным Тегам> Тип Сообщения в Кодексе.

141
19.02.2020, 21:54

Добавьте это к Вашему 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
}
27
19.02.2020, 21:54
  • 1
    Спасибо, это очень полезно! Но это должно быть: если (is_single () && is_post_type ('post_type')) {//волшебство работы} закрывающая скобка отсутствовала.... Много поздравлений, Ethel –   21.11.2011, 16:23
  • 2
    Это прекратило работать на кого-либо еще? Я использовал это целую вечность, но внезапно это прекратило работать на меня. Однако использование того же метода без глобального $wp_query всегда работает: if ( 'post-type' == get_post_type() ) {} –  turtledropbomb 13.01.2017, 15:39
  • 3
    is_post_type () обесценивается. –  Lisa Cerilli 21.12.2017, 14:23
if ( is_singular( 'book' ) ) {
    // conditional content/code
}

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

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

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

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

169
19.02.2020, 21:54

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

if ($post->post_type == "your desired post type") {
}
10
19.02.2020, 21:54

Чтобы протестировать, если сообщение является каким-либо пользовательским типом сообщения, выберите список всех не встроенные типы сообщения и тест, если тип сообщения находится в том списке.

Как функция:

/**
 * 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!';
24
19.02.2020, 21:54
  • 1
    Это должно быть принятым ответом. –  aalaap 21.03.2018, 15:33

Если Вы хотите подстановочную проверку на все свои пользовательские типы сообщения:

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

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

6
19.02.2020, 21:54

Теги

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