Título do widget na classe de tag before_widget

O usuário @dalenberg perguntou na minha dica anterior do widget se podemos adicionar o título ao widget como um todo. Na verdade, podemos, mas é um pouco complicado do que a dica anterior. Aqui está o código completo:

add_filter( 'widget_display_callback', 'add_widget_title_to_before_widget', 10, 3 );
function add_widget_title_to_before_widget( $instance, $widget_class, $args ) {
if ( ! empty( $instance['title'] ) ) {
$new_class
= 'class="' . sanitize_title( $instance['title'] ) . ' ';
$args
['before_widget'] = str_replace('class="', $new_class, $args['before_widget']);
$widget_class
->widget( $args, $instance );
return false;
}
}

Vamos explicar: widget_display_callbacké o último filtro a ser usado antes de chamar a widget()função. Mas como não podemos alterar o $argsarray, precisamos executar o widget()método dentro de nossa função.

$new_class = 'class="' . sanitize_title( $instance['title'] ) . ' ';
$args
['before_widget'] = str_replace('class="', $new_class, $args['before_widget']);

Primeiro, verificamos se temos um título. Se verdadeiro, executamos um para adicionar o título ao parâmetro gerado pela função.str_replace()before_titleregister_sidebar()

$widget_class->widget( $args, $instance );
return false;

Agora, chamamos a função usando nosso alterado . Retornar impedirá o WordPress de executar a função novamente, portanto, não obteremos widgets duplicados.widget()$argsfalsewidget()