Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug: Impossibile rimuovere tutti i documenti dal campo "Contenuti in evidenza" in CMB2 custom_attached_posts #471

Open
2 tasks done
auriti-web-design opened this issue Feb 12, 2025 · 5 comments
Labels
bug Something isn't working

Comments

@auriti-web-design
Copy link

Prerequisiti

Descrivi il problema

Utilizzando il tipo di campo CMB2 custom_attached_posts, è stato riscontrato un problema che impedisce la rimozione completa dei documenti selezionati. Il sistema forza il mantenimento di almeno un documento selezionato, comportamento che non è desiderabile in molti casi d'uso.

Comportamento Attuale

  • Quando si tenta di rimuovere l'ultimo documento dal campo, il sistema impedisce l'operazione
  • Il campo mantiene sempre almeno un documento selezionato
  • Questo crea una limitazione nell'interfaccia di amministrazione dove non è possibile avere uno stato vuoto

Comportamento Atteso

  • Gli utenti dovrebbero poter rimuovere tutti i documenti dal campo
  • Il campo dovrebbe accettare uno stato vuoto
  • L'operazione di salvataggio dovrebbe funzionare correttamente anche senza documenti selezionati

Passi per Riprodurre

  1. Creare un campo CMB2 di tipo custom_attached_posts
  2. Aggiungere più documenti al campo
  3. Provare a rimuovere tutti i documenti
  4. L'ultimo documento non può essere rimosso

Esempio di Codice del Problema

$cmb->add_field(array(
    'name' => 'Contenuti in evidenza',
    'id' => 'contenuti_evidenziati',
    'type' => 'custom_attached_posts',
    'options' => array(
        'show_thumbnails' => false,
        'filter_boxes' => true,
        'query_args' => array(
            'posts_per_page' => -1,
            'post_type' => array('documento_pubblico', 'dataset')
        )
    ),
    'attributes' => array(
        'data-max-items' => 6
    )
));

Soluzione

Il problema può essere risolto implementando tre filtri per gestire correttamente gli stati vuoti e la sanitizzazione dei valori:

/**
 * Gestione del salvataggio del campo
 */
add_action('cmb2_save_field', function($field_id, $updated, $field_args) {
    if ($field_id !== 'contenuti_evidenziati') {
        return;
    }
    
    if (empty($updated)) {
        update_option('documenti', array('contenuti_evidenziati' => ''));
    }
}, 10, 3);

/**
 * Gestione della sanitizzazione dei valori vuoti
 */
add_filter('cmb2_sanitize_custom_attached_posts', function($check, $value) {
    if (empty($value)) {
        return '';
    }
    return $check;
}, 10, 2);

/**
 * Fix per il warning di str_replace e gestione valori null
 */
add_filter('cmb2_attached_posts_before_save', function($value) {
    if (is_null($value) || empty($value)) {
        return '';
    }
    return $value;
}, 10, 1);

Dettagli Tecnici

La soluzione affronta diversi aspetti:

  1. Corretta gestione degli stati vuoti durante le operazioni di salvataggio
  2. Corretta sanitizzazione dei valori vuoti
  3. Correzione del warning str_replace quando si gestiscono valori null
  4. Mantenimento della funzionalità esistente per gli stati non vuoti

Ambiente

  • Versione WordPress: 6.7.1
  • Versione CMB2: 2.10.1

Includi link o screenshot

No response

Su quale sisitema operativo stai riscontrando il problema?

Windows, macOS, Linux

Su quale browser stai riscontrando il problema?

Chrome, Safari, Firefox, Microsoft Edge

Che versione del tema stai utilizzando?

1.11.2

@auriti-web-design auriti-web-design added the bug Something isn't working label Feb 12, 2025
@enrimk
Copy link
Contributor

enrimk commented Feb 12, 2025

V. anche: #268 (che era rimasto un po' in sospeso).

@VinsMach
Copy link
Collaborator

ciao @auriti-web-design @enrimk abbiamo effettuato una pull request che riguarda questo; potreste verificare e farci sapere? grazie

@enrimk
Copy link
Contributor

enrimk commented Feb 12, 2025

@VinsMach
Ottimo l'aggiornamento di CMB2, ma purtroppo non sembra avere risolto questo specifico bug.

Tra parentesi, per aggiungere un dettaglio, questo problema con il salvataggio di liste vuote pare ci sia solo nelle sezioni "Novità" e "Documenti e dati"1 delle opzioni del tema, nel campo 'contenuti_evidenziati'. Lo stesso widget 'custom_attached_posts' è usato in altre sezioni, ma lì si comporta bene.

Footnotes

  1. Edit: Non è proprio così, in realtà. Vedi sotto.

@VinsMach
Copy link
Collaborator

@enrimk una richiesta... potreste fare un video (o una serie di screen) per replicare la stessa problematica?

grazie per il supporto

@enrimk
Copy link
Contributor

enrimk commented Feb 13, 2025

Testando ulteriormente, il quadro dei sintomi si complica. 🙂

Non è esatto quello che dicevo sopra sulle sezioni Novità e Documenti.
Non c'entrano quelle sezioni di per sé, ma c'entra la presenza di altri campi, e se sono compilati.
In realtà, il bug sta al salvataggio di una pagina di opzioni tutte completamente vuote (tutti i campi deselezionati).
[Per coincidenza, nei primi miei test su Novità e Documenti, l'unico altro campo "argomenti" era appunto vuoto.]

Quindi, come controprova, per "sbiancare" un campo di tipo Attached Posts che non si vuota, si deve:

  • compilare con un valore qualunque uno degli altri campi vuoti (di altro tipo) della stessa pagina di opzioni;
  • salvare (il valore deve essere già presente, non inviato con la stessa modifica);
  • vuotare il campo attached posts;
  • vuotare l'altro campo (che ora si vuota. Quindi il bug non vale per tutti i tipi).

Cose simili, vedo, sono già state segnalate con diverse varianti negli issue di CMB2, ad es. in 1509.


@VinsMach
Non ho modo ora di fare un video - ma il problema mi sembra già molto molto ben descritto nell'issue dall'OP.
Non avete un ambiente di test in cui fare una prova? Alla fine, video o no, si dovrebbe comunque passare da lì.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants