Closed milesimarco closed 5 months ago
ogni cambiamento potrebbe avere impatti negativi.
O positivi: al momento breadcrumb.php non è per nulla conforme ai requisiti.
Inoltre, il modo in cui è stato adattato a partire dal plugin breadcrumb-trail impedisce di correggerne il comportamento senza riscriverne molte parti.
Ad es., viene diminuita di molto l'utilità del filtro "_breadcrumb_trailitems", che permetterebbe di intervenire più puntualmente, e che invece può venire eluso dai return
aggiunti prima.
La PR offre un modo di intervenire per sostituire le breadcrumb del tema con le proprie, con una forma di short-circuit che previene il tema. Già c'è qualcosa del genere, ma è più radicale perché sostituisce tutto l'oggetto.
Serve sicuramente agli sviluppatori di plugin esterni (il che dev'essere l'intento dell'OP), ma può tornare utile anche per un child theme. Anche se, per correggere i difetti fondamentali che impattano sull'asseverazione, sarebbe meglio ristrutturare il modulo all'origine.
Grazie @enrimk attendiamo un riscontro di @milesimarco
@enrimk temo che non possiamo dare uno strumento così flessibile per personalizzare le breadcrumb, perché sarebbe troppo facile alterarle e non passare asseverazione.
Ciao, in generale la modifica apre possibilità di personalizzazione, e come tale positiva o negativa a seconda di come venga utilizzata.
Può essere utilizzata male e portare a non superare l'asseverazione, analogamente può essere fatta una riscrittura dell'oggetto o una modifica da template tramite temi child con lo stesso risultato quindi la responsabilità di come vengono integrati tra di loro gli strumenti messi a disposizione dipende dalle capacità o dal buon senso di chi la implementa e che ha responsabilità per asseverazione.
Attualmente, le breadcrumb non sono gestite correttamente quando si utilizzano plugin di terze parti, specialmente nel caso di tassonomie o post type aggiuntivi. Questo è particolarmente rilevante per coloro che utilizzano https://github.com/WPGov/amministrazione-trasparente (che potrebbe beneficiare del nuovo filtro) ma anche per altri sistemi di gestione eventi o qualsiasi altro plugin anche sviluppato da chi implementa il singolo sito WP.
Credo che in ogni caso l'apertura sia sensata, forse sarebbe utile anche una ristrutturazione del modulo o una naming convention più spinta per gestire e documentare questi filtri, ma temo che questi casi d'uso ad oggi non giustifichino un effort in tal senso.
Qui un esempio di integrazione che adotterei su https://github.com/WPGov/amministrazione-trasparente (ancora non rilasciato)
add_filter( 'dci_get_breadcrumb_items', [ $this, 'dci_get_breadcrumb_items' ], 10, 2 );
function dci_get_breadcrumb_items( $items ) { // Design Comuni WordPress theme
if ( is_tax(array('tipologie') ) ) {
$terms = get_the_terms( get_the_ID(), 'tipologie');
$group = at_getGroupNameByTerm( $terms[0]->term_id );
if ( at_option('page_id') ) {
$items[] = "<a href='".get_permalink( at_option('page_id') )."'>".get_the_title( at_option('page_id') )."</a>";
$items[] = '<a href="'.get_permalink( at_option('page_id') ).'#'.$group.'">'.at_getGroupNameBySlug($group).'</a>';
}
$taxonomy = get_queried_object();
$items[] = $taxonomy->name;
return $items;
} else if (get_post_type() == 'amm-trasparente') {
$terms = get_the_terms( get_the_ID(), 'tipologie');
$group = at_getGroupNameByTerm( $terms[0]->term_id );
if ( at_option('page_id') ) {
$items[] = "<a href='".get_permalink( at_option('page_id') )."'>".get_the_title( at_option('page_id') )."</a>";
$items[] = '<a href="'.get_permalink( at_option('page_id') ).'#'.$group.'">'.at_getGroupNameBySlug($group).'</a>';
}
if($terms){
$items[] = sprintf( '<a href="%s">%s</a>', esc_url( get_term_link( $terms[0] ) ), $terms[0]->name );
}
$items[] = get_the_title();
return $items;
}
return;
}
Grazie infinite @milesimarco
Ciao, in generale la modifica apre possibilità di personalizzazione, e come tale positiva o negativa a seconda di come venga utilizzata.
Può essere utilizzata male e portare a non superare l'asseverazione, analogamente può essere fatta una riscrittura dell'oggetto o una modifica da template tramite temi child con lo stesso risultato quindi la responsabilità di come vengono integrati tra di loro gli strumenti messi a disposizione dipende dalle capacità o dal buon senso di chi la implementa e che ha responsabilità per asseverazione.
Attualmente, le breadcrumb non sono gestite correttamente quando si utilizzano plugin di terze parti, specialmente nel caso di tassonomie o post type aggiuntivi. Questo è particolarmente rilevante per coloro che utilizzano https://github.com/WPGov/amministrazione-trasparente (che potrebbe beneficiare del nuovo filtro) ma anche per altri sistemi di gestione eventi o qualsiasi altro plugin anche sviluppato da chi implementa il singolo sito WP.
Credo che in ogni caso l'apertura sia sensata, forse sarebbe utile anche una ristrutturazione del modulo o una naming convention più spinta per gestire e documentare questi filtri, ma temo che questi casi d'uso ad oggi non giustifichino un effort in tal senso.
Qui un esempio di integrazione che adotterei su https://github.com/WPGov/amministrazione-trasparente (ancora non rilasciato)
add_filter( 'dci_get_breadcrumb_items', [ $this, 'dci_get_breadcrumb_items' ], 10, 2 ); function dci_get_breadcrumb_items( $items ) { // Design Comuni WordPress theme if ( is_tax(array('tipologie') ) ) { $terms = get_the_terms( get_the_ID(), 'tipologie'); $group = at_getGroupNameByTerm( $terms[0]->term_id ); if ( at_option('page_id') ) { $items[] = "<a href='".get_permalink( at_option('page_id') )."'>".get_the_title( at_option('page_id') )."</a>"; $items[] = '<a href="'.get_permalink( at_option('page_id') ).'#'.$group.'">'.at_getGroupNameBySlug($group).'</a>'; } $taxonomy = get_queried_object(); $items[] = $taxonomy->name; return $items; } else if (get_post_type() == 'amm-trasparente') { $terms = get_the_terms( get_the_ID(), 'tipologie'); $group = at_getGroupNameByTerm( $terms[0]->term_id ); if ( at_option('page_id') ) { $items[] = "<a href='".get_permalink( at_option('page_id') )."'>".get_the_title( at_option('page_id') )."</a>"; $items[] = '<a href="'.get_permalink( at_option('page_id') ).'#'.$group.'">'.at_getGroupNameBySlug($group).'</a>'; } if($terms){ $items[] = sprintf( '<a href="%s">%s</a>', esc_url( get_term_link( $terms[0] ) ), $terms[0]->name ); } $items[] = get_the_title(); return $items; } return; }
visto che ho lo stesso problema, poichè utilizzo il plugin amministrazione trasparente sul tema comuni, dove dovrei inserire questa modifica/aggiunta per far funzionare le breadcrumb? Grazie
dove dovrei inserire questa modifica/aggiunta
Va bene dovunque; in functions.php di un child theme, o in un mini-plugin apposta. Un mini-plugin magari è meglio: così quando AT implementerà la modifica nativamente, farai prima a disattivare la tua (per non avere, a quel punto, il path doppio).
Però, dopo la 1.9.1, va formulato così (ad es):
add_filter( 'dci_get_breadcrumb_items', 'xyz_filter_dci_get_breadcrumb_items', 10, 2 );
function xyz_filter_dci_get_breadcrumb_items( $is_custom, $items ) {
// [...]
return $items;
}
dove dovrei inserire questa modifica/aggiunta
Va bene dovunque; in functions.php di un child theme, o in un mini-plugin apposta. Un mini-plugin magari è meglio: così quando AT implementerà la modifica nativamente, farai prima a disattivare la tua (per non avere, a quel punto, il path doppio).
Però, dopo la 1.9.1, va formulato così (ad es):
add_filter( 'dci_get_breadcrumb_items', 'xyz_filter_dci_get_breadcrumb_items', 10, 2 ); function xyz_filter_dci_get_breadcrumb_items( $is_custom, $items ) { // [...] return $items; }
ho provato ma niente. Entro nel dettaglio della problematica. Sto utilizzando il plug-in Amministrazione trasparente e ho inserito lo shortcode in una pagina. Ora quando entro nella singola voce, la breadcrumb risulta come da allegato, ma se clicco sulla voce "Amministrazione trasparente" della breadcrumb rimanda a comune...xxx.../amm-trasp/ che ovviamente non è il link corretto della pagina.
Siamo ormai terribilmente OT qui. Ma riguarderei sia il codice della tua patch (è attivo?), sia il tuo setup del plugin AT (pagina? gruppi?).
Descrizione
Aggiunta di un filtro per consentire a funzioni e plugin terzi di variare il risultato dei breadcrumb, ad esempio aggiungendo prefissi o sezioni in alcuni livelli.
Esempio di utilizzo:
Checklist