post_class

Позволяет изменить список имен CSS-классов для текущей записи
Хук WordPress
INT 2.7.0
WordPress Icon
Содержание
  1. Описание хука
  2. Примеры использования
  3. Применение фильтра post_class для изменения классов поста
  4. Изменение классов поста с помощью хука post_class
  5. Добавление дополнительных классов к посту с использованием хука post_class
  6. Изменение классов поста в зависимости от категории с помощью хука post_class
  7. Использование хука post_class для добавления классов к постам определенного типа
  8. Вопросы и ответы
  9. Как добавить дополнительные классы к посту с помощью хука post_class?
  10. Как удалить определенный класс из списка классов поста с помощью хука post_class?
  11. Как изменить порядок классов в списке классов поста с помощью хука post_class?
  12. Как добавить условие для определенного класса в списке классов поста с помощью хука post_class?
  13. Как использовать хук post_class для стилизации определенного типа постов?
  14. Как изменить классы поста в зависимости от его категории с помощью хука post_class?
  15. Как добавить классы к посту на основе его метаданных с помощью хука post_class?
  16. Как использовать хук post_class для добавления классов к постам в определенном архиве или категории?
  17. Как изменить классы поста в зависимости от его статуса с помощью хука post_class?
  18. Связанные элементы

Описание хука

Хук «post_class» позволяет определить список CSS классов для текущего поста. Он предоставляет возможность изменить или добавить дополнительные классы к посту.

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

apply_filters( 'post_class', string[] $classes, string[] $css_class, int $post_id )

Этот хук используется с помощью функции apply_filters(). Он принимает 4 параметра: массив $classes, массив $css_class, идентификатор поста $post_id. Функция apply_filters() позволяет вызвать хук «post_class» и передать ему указанные параметры.

  • $classes (тип: массив) — Массив имен классов поста.
  • $css_class (тип: массив) — Массив дополнительных имен классов, добавленных к посту.
  • $post_id (тип: целое число) — Идентификатор поста.
<?php
/**
 * Функция-обработчик для хука "post_class".
 *
 * @param array  $classes    Массив имен классов поста.
 * @param array  $css_class  Массив дополнительных имен классов, добавленных к посту.
 * @param int    $post_id    Идентификатор поста.
 * @return array             Массив имен классов поста с изменениями или дополнениями.
 */
function custom_post_class( $classes, $css_class, $post_id ) {
    // Добавляем класс "featured" к посту, если он является избранным.
    if ( is_featured_post( $post_id ) ) {
        $classes[] = 'featured';
    }
    
    // Удаляем класс "sticky" из поста, если он не является закрепленным.
    if ( ! is_sticky( $post_id ) ) {
        $classes = array_diff( $classes, array( 'sticky' ) );
    }
    
    return $classes;
}
add_filter( 'post_class', 'custom_post_class', 10, 3 );
?>

В приведенном выше примере мы определяем функцию-обработчик «custom_post_class», которая принимает 3 параметра: массив имен классов поста $classes, массив дополнительных имен классов $css_class и идентификатор поста $post_id. Внутри функции мы добавляем класс «featured» к посту, если он является избранным, и удаляем класс «sticky» из поста, если он не является закрепленным. Затем мы возвращаем измененный массив имен классов поста. Наконец, мы добавляем функцию-обработчик к хуку «post_class» с помощью функции add_filter().

Примеры использования

Применение фильтра post_class для изменения классов поста


/**
 * Функция для изменения классов поста с помощью фильтра post_class.
 *
 * @param array $classes Массив классов поста.
 * @param array $css_class Массив дополнительных классов.
 * @param int $post_id ID поста.
 * @return array Массив измененных классов поста.
 */
function custom_post_class( $classes, $css_class, $post_id ) {
    // Добавляем класс 'custom-class' к классам поста.
    $classes[] = 'custom-class';
    return $classes;
}
add_filter( 'post_class', 'custom_post_class', 10, 3 );

Изменение классов поста с помощью хука post_class


/**
 * Функция для изменения классов поста с помощью хука post_class.
 *
 * @param array $classes Массив классов поста.
 * @param array $css_class Массив дополнительных классов.
 * @param int $post_id ID поста.
 */
function custom_post_class( $classes, $css_class, $post_id ) {
    // Удаляем класс 'post' из классов поста.
    $classes = array_diff( $classes, array( 'post' ) );
    return $classes;
}
add_filter( 'post_class', 'custom_post_class', 10, 3 );

Добавление дополнительных классов к посту с использованием хука post_class


/**
 * Функция для добавления дополнительных классов к посту с использованием хука post_class.
 *
 * @param array $classes Массив классов поста.
 * @param array $css_class Массив дополнительных классов.
 * @param int $post_id ID поста.
 * @return array Массив классов поста с добавленными дополнительными классами.
 */
function custom_post_class( $classes, $css_class, $post_id ) {
    // Добавляем классы 'custom-class1' и 'custom-class2' к классам поста.
    $classes[] = 'custom-class1';
    $classes[] = 'custom-class2';
    return $classes;
}
add_filter( 'post_class', 'custom_post_class', 10, 3 );

Изменение классов поста в зависимости от категории с помощью хука post_class


/**
 * Функция для изменения классов поста в зависимости от категории с помощью хука post_class.
 *
 * @param array $classes Массив классов поста.
 * @param array $css_class Массив дополнительных классов.
 * @param int $post_id ID поста.
 * @return array Массив классов поста с измененными классами в зависимости от категории.
 */
function custom_post_class( $classes, $css_class, $post_id ) {
    // Получаем объект поста.
    $post = get_post( $post_id );
    // Получаем массив категорий поста.
    $categories = get_the_category( $post_id );
    // Проверяем, принадлежит ли пост категории 'news'.
    if ( in_array( 'news', wp_list_pluck( $categories, 'slug' ) ) ) {
        // Если да, добавляем класс 'news-post' к классам поста.
        $classes[] = 'news-post';
    }
    return $classes;
}
add_filter( 'post_class', 'custom_post_class', 10, 3 );

Использование хука post_class для добавления классов к постам определенного типа


/**
 * Функция для добавления классов к постам определенного типа с использованием хука post_class.
 *
 * @param array $classes Массив классов поста.
 * @param array $css_class Массив дополнительных классов.
 * @param int $post_id ID поста.
 * @return array Массив классов поста с добавленными классами для постов определенного типа.
 */
function custom_post_class( $classes, $css_class, $post_id ) {
    // Получаем объект поста.
    $post = get_post( $post_id );
    // Проверяем, является ли пост типом 'product'.
    if ( 'product' === $post->post_type ) {
        // Если да, добавляем класс 'product-post' к классам поста.
        $classes[] = 'product-post';
    }
    return $classes;
}
add_filter( 'post_class', 'custom_post_class', 10, 3 );

Вопросы и ответы

Как добавить дополнительные классы к посту с помощью хука post_class?

Для добавления дополнительных классов к посту с помощью хука post_class необходимо использовать функцию add_filter и указать имя хука post_class. Внутри функции-обработчика можно добавить нужные классы в массив $classes.


function custom_post_class( $classes ) {
    $classes[] = 'custom-class';
    $classes[] = 'another-class';
    return $classes;
}
add_filter( 'post_class', 'custom_post_class' );

Как удалить определенный класс из списка классов поста с помощью хука post_class?

Для удаления определенного класса из списка классов поста с помощью хука post_class необходимо использовать функцию remove_filter и указать имя хука post_class и функцию-обработчик, которую нужно удалить.


function remove_custom_class( $classes ) {
    if ( ( $key = array_search( 'custom-class', $classes ) ) !== false ) {
        unset( $classes[$key] );
    }
    return $classes;
}
add_filter( 'post_class', 'remove_custom_class' );

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

Для изменения порядка классов в списке классов поста с помощью хука post_class необходимо использовать функцию array_splice для перемещения нужного класса на нужную позицию в массиве $classes.


function change_class_order( $classes ) {
    if ( ( $key = array_search( 'custom-class', $classes ) ) !== false ) {
        $class = $classes[$key];
        array_splice( $classes, $key, 1 );
        array_splice( $classes, 1, 0, $class );
    }
    return $classes;
}
add_filter( 'post_class', 'change_class_order' );

Как добавить условие для определенного класса в списке классов поста с помощью хука post_class?

Для добавления условия для определенного класса в списке классов поста с помощью хука post_class в WordPress, можно использовать функцию add_filter().


function custom_post_class( $classes, $css_class, $post_id ) {
    // Добавляем класс 'custom-class' если условие выполняется
    if ( /* условие */ ) {
        $classes[] = 'custom-class';
    }
    return $classes;
}
add_filter( 'post_class', 'custom_post_class', 10, 3 );

Как использовать хук post_class для стилизации определенного типа постов?

Для стилизации определенного типа постов с помощью хука post_class в WordPress, можно использовать функцию add_filter() и проверить тип поста.


function custom_post_class( $classes, $css_class, $post_id ) {
    $post_type = get_post_type( $post_id );
    // Добавляем класс 'custom-class' для типа поста 'custom-post-type'
    if ( 'custom-post-type' === $post_type ) {
        $classes[] = 'custom-class';
    }
    return $classes;
}
add_filter( 'post_class', 'custom_post_class', 10, 3 );

Как изменить классы поста в зависимости от его категории с помощью хука post_class?

Для изменения классов поста в зависимости от его категории с помощью хука post_class в WordPress, можно использовать функцию add_filter() и проверить категорию поста.


function custom_post_class( $classes, $css_class, $post_id ) {
    $categories = get_the_category( $post_id );
    foreach ( $categories as $category ) {
        // Добавляем класс 'category-slug' для каждой категории поста
        $classes[] = 'category-' . $category->slug;
    }
    return $classes;
}
add_filter( 'post_class', 'custom_post_class', 10, 3 );

Как добавить классы к посту на основе его метаданных с помощью хука post_class?

Хук post_class позволяет добавлять дополнительные классы к посту на основе его метаданных. Для этого нужно использовать функцию add_filter() и указать название хука post_class, а также функцию, которая будет обрабатывать этот хук.


function custom_post_class( $classes, $class, $post_id ) {
    // Получаем метаданные поста
    $metadata = get_post_meta( $post_id, 'my_custom_metadata', true );
    // Проверяем наличие метаданных и добавляем классы
    if ( $metadata ) {
        $classes[] = 'custom-class';
        $classes[] = 'custom-class-' . $metadata;
    }
    return $classes;
}
add_filter( 'post_class', 'custom_post_class', 10, 3 );

Как использовать хук post_class для добавления классов к постам в определенном архиве или категории?

Хук post_class также можно использовать для добавления классов к постам только в определенном архиве или категории. Для этого нужно проверить текущий контекст с помощью функций is_archive() или is_category() и добавить классы при необходимости.


function custom_post_class( $classes, $class, $post_id ) {
    if ( is_archive() || is_category() ) {
        $classes[] = 'custom-class';
    }
    return $classes;
}
add_filter( 'post_class', 'custom_post_class', 10, 3 );

Как изменить классы поста в зависимости от его статуса с помощью хука post_class?

Хук post_class также позволяет изменять классы поста в зависимости от его статуса. Для этого нужно проверить статус поста с помощью функции get_post_status() и добавить или удалить классы при необходимости.


function custom_post_class( $classes, $class, $post_id ) {
    $post_status = get_post_status( $post_id );
    if ( $post_status == 'draft' ) {
        $classes[] = 'draft-class';
    } elseif ( $post_status == 'pending' ) {
        $classes[] = 'pending-class';
    }
    return $classes;
}
add_filter( 'post_class', 'custom_post_class', 10, 3 );

Хук post_class является мощным инструментом для добавления и изменения классов у постов в WordPress. С его помощью можно легко настраивать отображение постов на основе их метаданных, контекста или статуса. Используйте этот хук, чтобы создать уникальные стили для различных типов постов и улучшить пользовательский опыт на вашем сайте.

Связанные элементы

  • Функция get_post_class(): возвращает массив классов CSS для текущего поста.
  • Функция post_class(): выводит классы CSS для текущего поста.
  • Функция get_body_class(): возвращает массив классов CSS для тега <body>.
  • Функция body_class(): выводит классы CSS для тега <body>.
  • Хук body_class: фильтрует список классов CSS для тега <body>.
  • Класс WP_Post: представляет объект поста в WordPress.
  • Класс WP_Query: выполняет запросы к базе данных WordPress для получения постов.
Обсуждение