web-dev-qa-db-fra.com

Ajouter un nom de classe différent à chaque post-it?

J'essaie de créer une section de contenu en vedette de mon blog. Cela contiendra deux messages collants.

J'ai une boucle personnalisée qui n'affiche que les deux posts collants. Dans la boucle, j'obtiens un modèle content-featured.php qui présente la structure des posts collants.

Dans le post principal, j'utilise post_class(). Je sais que je peux transmettre une valeur telle que post_class('featured'), mais j'aimerais attribuer un nom de classe différent à chaque post-it, c'est-à-dire featured-0, featured-1.

J'ai essayé de créer une fonction dans functions.php, mais comme je connais très peu de choses sur PHP, je ne parviens pas à la faire fonctionner. Voici ce que j'ai

//add classes to sticky posts
function gwad_sticky_classes( $classes, $class ) {
    $sticky = get_option( 'sticky_posts' );
    if ( $sticky ) {
        $query = new WP_Query( $sticky );

        $sticky[0] ='featured-0';
        $sticky[1] = 'featured-1';

    }

    return $classes;
}
add_filter( 'post_class', 'gwad_sticky_classes', 10, 2 );

Comme vous pouvez le constater, je n'ai aucune idée de ce que je fais. Toute aide serait grandement appréciée.

3
Destiny2Gamer

Voici une solution qui ajoute des classes collantes supplémentaires, une pour le post-identifiant et l'autre pour le post-collant.

/**
 * Adds .featured-{$post_id} and .featured-{$sticky_counter}
 * class names to sticky posts.
 *
 * @param array $classes An array of post classes.
 * @param array $class   An array of additional classes added to the post.
 * @param int   $post_id The post ID.
 *
 * @return array
 */
add_filter( 'post_class', 'gwad_sticky_classes', 10, 3 ); 
function gwad_sticky_classes( $classes, $class, $post_id ) {

    // Bail if this is not a sticky post.
    if ( ! is_sticky() ) {
        return $classes;
    }

    // Counter for sticky posts.
    static $gwad_sticky_counter = 0;

    $classes[] = 'featured-' . $post_id;
    $classes[] = 'featured-' . ++$gwad_sticky_counter; 

    return $classes;
}

Edit: Voici une version alternative qui évite d'utiliser la variable statique:

add_filter( 'post_class', 'gwad_sticky_classes', 10, 3 ); 
function gwad_sticky_classes( $classes, $class, $post_id ) {

    // Bail if this is not a sticky post.
    if ( ! is_sticky() ) {
        return $classes;
    }

    global $wp_query;
    $classes[] = 'featured-' . $post_id;
    $classes[] = 'featured-' . ( string ) ( $wp_query->current_post + 1 );

    return $classes;
}
3
Dave Romsey

Au lieu de cela, vous pouvez le faire avec des fichiers CSS simples. La classe post contiendra la classe sticky par défaut. Ainsi, dans le thème vingt-sept, par exemple, où la boucle est dans un div "main":

#main .sticky:nth-of-type(1) {
   color: red;
}

#main .sticky:nth-of-type(2) {
    color: blue;
}

fera l'affaire.

1
ronald