Come aggiungere una classe CSS al logo personalizzato?
Ho abilitato custom-logo
per il mio tema e l'ho inserito con <?php the_custom_logo(); ?>
nell'header. C'è un modo per aggiungere semplicemente altre classi direttamente a questa immagine? Di default viene solo con custom-logo
.

WordPress fornisce un hook filter per la personalizzazione del logo personalizzato. L'hook get_custom_logo
è il filtro. Per cambiare la classe del logo, questo codice potrebbe esserti utile.
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;
}
Riferimento: Come cambiare la classe del logo personalizzato e del link del logo in WordPress

Ecco un suggerimento su come potremmo provare ad aggiungere classi attraverso il filtro wp_get_attachment_image_attributes
(non testato):
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;
} );
dove puoi modificare le classi in base alle tue esigenze.

Come hai scoperto, the_custom_logo
si basa su get_custom_logo
, che a sua volta chiama wp_get_attachment_image
per aggiungere la classe custom-logo
. Quest'ultima funzione ha un filtro, wp_get_attachment_image_attributes
, che puoi utilizzare per manipolare gli attributi dell'immagine.
Quindi quello che potresti fare è creare un filtro che verifichi se la classe custom-logo
è presente e, in caso affermativo, aggiungere altre classi.

Per chiunque altro stia cercando soluzioni. Ho trovato questo, che trovo molto più chiaro della risposta accettata.
Inoltre, fornisce modi semplici per modificare anche l'URL del link! Solo un po' più dettagliato della risposta accettata.
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;
}

Credo di aver trovato una soluzione. Ma mi chiedo se sia il modo corretto? Sembra un po' sporco in qualche modo: ho semplicemente copiato le parti relative al logo da wp-includes/general-template.php nel functions.php del mio tema e rinominato le funzioni aggiungendo alcune classi personalizzate:
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', // aggiunte classi qui
'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 );
}

Una piccola modifica alla risposta di @Dhinju Divakaran sopra. Sostituisci prima la stringa "custom-logo-link" e poi "custom-logo" perché "custom-logo" all'interno di "custom-logo-link" veniva sostituito erroneamente. Di seguito il codice aggiornato.
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' );
