Cum să adaugi o clasă CSS la logo-ul personalizat?

16 iun. 2016, 13:14:28
Vizualizări: 30.2K
Voturi: 22

Am activat custom-logo pentru tema mea și l-am afișat cu <?php the_custom_logo(); ?> în header. Există vreo posibilitate de a adăuga mai multe clase direct acestei imagini? În mod implicit, acesta vine doar cu clasa custom-logo.

0
Toate răspunsurile la întrebare 7
1
27

WordPress oferă un cârlig (hook) de filtrare pentru personalizarea siglei personalizate. Cârligul get_custom_logo este filtrul. Pentru a modifica clasa siglei, acest cod vă poate ajuta.

add_filter( 'get_custom_logo', 'change_logo_class' );


function change_logo_class( $html ) {

    $html = str_replace( 'custom-logo', 'your-custom-class', $html );
    $html = str_replace( 'custom-logo-link', 'your-custom-class', $html );

    return $html;
}

Referință: Cum să schimbi clasa siglei personalizate și a link-ului siglei în WordPress

18 iun. 2016 08:48:29
Comentarii

Mulțumesc, funcționează perfect!

Cu cât mă uit mai mult la asta, cu atât devin mai trist.

get_custom_logo() ar trebui să accepte un șir de clase și să nu necesite un filtru. Ar trebui să aibă și opțiunea de a afișa sau nu un link HTML.

Adam Patterson Adam Patterson
30 mar. 2020 06:38:35
1
15

Iată o sugestie despre cum am putea încerca să adăugăm clase prin filtrul wp_get_attachment_image_attributes (netestat):

add_filter( 'wp_get_attachment_image_attributes', function( $attr )
{
    if( isset( $attr['class'] )  && 'custom-logo' === $attr['class'] )
        $attr['class'] = 'custom-logo foo-bar foo bar';

    return $attr;
} );

unde puteți ajusta clasele în funcție de nevoile dumneavoastră.

16 iun. 2016 13:46:23
Comentarii

Mulțumesc, soluția ta funcționează cel mai bine.

S1awek S1awek
17 ian. 2020 12:18:16
0

După cum ai descoperit, funcția the_custom_logo se bazează pe get_custom_logo, care la rândul ei apelează wp_get_attachment_image pentru a adăuga clasa custom-logo. Această ultimă funcție dispune de un filtru, wp_get_attachment_image_attributes, pe care îl poți folosi pentru a manipula atributele imaginii.

Deci, ceea ce ai putea face este să construiești un filtru care verifică dacă clasa custom-logo este prezentă și, în caz afirmativ, să adaugi mai multe clase.

16 iun. 2016 13:43:16
0

Doar pentru oricine altcineva care caută soluții. Am găsit asta, care mi se pare mult mai clară decât răspunsul acceptat.

În plus, oferă modalități simple de a schimba URL-ul pe link! Doar un pic mai detaliat decât răspunsul acceptat.

add_filter( 'get_custom_logo', 'add_custom_logo_url' );
function add_custom_logo_url() {
    $custom_logo_id = get_theme_mod( 'custom_logo' );
    $html = sprintf( '<a href="%1$s" class="custom-logo-link" rel="home" itemprop="url">%2$s</a>',
            esc_url( 'www.somewhere.com' ),
            wp_get_attachment_image( $custom_logo_id, 'full', false, array(
                'class'    => 'custom-logo',
            ) )
        );
    return $html;   
} 
26 iun. 2019 14:48:28
0

Cred că am găsit un răspuns. Dar mă întreb dacă aceasta este calea corectă? Pare un pic murdar cumva: pur și simplu am copiat părțile legate de logo din wp-includes/general-template.php în functions.php al temei mele și am redenumit funcțiile adăugând câteva clase personalizate:

function FOOBAR_get_custom_logo( $blog_id = 0 ) {
    $html = '';

    if ( is_multisite() && (int) $blog_id !== get_current_blog_id() ) {
        switch_to_blog( $blog_id );
    }

    $custom_logo_id = get_theme_mod( 'custom_logo' );

    if ( $custom_logo_id ) {
        $html = sprintf( '<a href="%1$s" class="custom-logo-link" rel="home" itemprop="url">%2$s</a>',
            esc_url( home_url( '/' ) ),
            wp_get_attachment_image( $custom_logo_id, 'full', false, array(
                'class'    => 'custom-logo FOO-BAR FOO BAR', // am adăugat clase aici
                'itemprop' => 'logo',
            ) )
        );
    }

    elseif ( is_customize_preview() ) {
        $html = sprintf( '<a href="%1$s" class="custom-logo-link" style="display:none;"><img class="custom-logo"/></a>',
            esc_url( home_url( '/' ) )
        );
    }

    if ( is_multisite() && ms_is_switched() ) {
        restore_current_blog();
    }

    return apply_filters( 'FOOBAR_get_custom_logo', $html );
}

function FOOBAR_the_custom_logo( $blog_id = 0 ) {
    echo FOOBAR_get_custom_logo( $blog_id );
}
16 iun. 2016 13:29:13
0

Puteți utiliza filtrul get_custom_logo_image_attributes

add_filter( 'get_custom_logo_image_attributes', function(  
$custom_logo_attr, $custom_logo_id, $blog_id  )
{
    $custom_logo_attr['class'] = 'clasa-dvs-personalizata';

    return $custom_logo_attr;
} ,10,3);
21 apr. 2022 21:17:30
0

Doar o mică modificare la răspunsul lui @Dhinju Divakaran de mai sus. Înlocuiți mai întâi șirul "custom-logo-link" și apoi "custom-logo", deoarece "custom-logo" din "custom-logo-link" era de asemenea înlocuit. Mai jos este codul actualizat.

function change_logo_class($html) {
    
    $html = str_replace('custom-logo-link', 'navbar-brand', $html);
    $html = str_replace('custom-logo', 'img-fluid', $html);
    return $html;
}
add_filter( 'get_custom_logo', 'change_logo_class' );
31 mai 2024 13:53:34