italia / design-comuni-wordpress-theme

Tema Wordpress per i siti dei comuni italiani
GNU Affero General Public License v3.0
33 stars 33 forks source link

Semplificazione data pubblicazione notizia? #332

Closed enrimk closed 1 year ago

enrimk commented 1 year ago

Prerequisiti

Proposta

Le Notizie hanno un campo facoltativo data_pubblicazione, distinto dal campo post_date del post, e registrato in un postmeta. Complica l'ordinamento per data, duplica il ruolo di post_date, e non è chiara la sua funzione. Dovrebbe essere eliminato, in favore di post_date. Oppure, reso obbligatorio.

Motivazione e contesto

A backoffice, sulla data pubblicazione c'è l'indicazione "Se non compilato, a front end viene mostrata la data di pubblicazione del post". Ciò comporta che entrambe le date devono essere considerate anche per l'ordinamento, visto che ha poco senso che la data mostrata non corrisponda a quella per cui le notizie sono ordinate. [^1] date-notizia_1 post_date-notiizia Tecnicamente, questo risulta in qualche complicazione, che sarebbe forse evitabile. Ad es., il fatto che post_date debba supplire alla mancanza dell'altra data, attualmente viene risolto demandando a php l'ordinamento. Questa non è detto che sia una soluzione scalabile, e che rimanga praticabile anche con molte notizie. Meglio sarebbe lasciare a mysql il compito di ordinare. Però, l'SQL si complica, probabilmente oltre quello che è ragionevolmente gestibile con WP_Query. [^2]

L'avere due campi data distinti ha qualche utilità? Se no, sarebbe bene eliminarne uno, e siccome l'ordinamento per data è normalmente ottenuto via post_date, che porta a query più semplici e veloci (è indicizzato, sta dentro a wp_posts...), è il postmeta che è da sacrificare. [^3]


In subordine, se non si vogliono cambiare troppo le cose, si può invece rendere obbligatorio il postmeta. A questo punto, tutti gli ordinamenti avvengono sempre solo per quel campo, e diventano meglio realizzabili, anche via WP_Meta_Query (che ad. es. si può passare alle procedure ajax lasciandole quasi come sono ora).

[^1]: Do per scontato che l'ordinamento normale per le notizie/novità sia per data, e non alfabetico. [^2]: Non so, un COALESCE() tra i due campi - che sono uno in wp_posts, l'altro in una join su wp_postmeta... Insomma., forse si può anche realizzare, attraverso opportuni hooks, e passando un criterio custom a orderby per poterlo usare anche via ajax, eccetera, eccetera. Ma serve? [^3]: È vero che togliere il campo dall'"area centrale" e lasciare solo quello standard del post è meno chiaro per chi non usa abitualmente WP. A ciò si potrebbe ovviare lasciando "data pubblicazione" in centro accanto a "data scadenza", ma facendogli replicare il campo standard - rendendolo readonly oppure trasformandolo in un datetime.


La mia opinione è che questo singolo punto contribuirebbe molto a semplificare la risoluzione di issue persistenti come #17 (che in realtà non è del tutto risolto), #192 e #296.

Cam-al commented 1 year ago

Ho modificato l'ordinamento delle notizie nella pagina "Novità" per averle in ordine di data di pubblicazione, ma inserendo delle notizie e compilando il campo data di pubblicazione su alcune e lasciandolo vuoto in altre quest'ultime non vengono mostrate prima delle altre anche avendo la data più recente. Quando invece si clicca su carica altri risultati si risolve tutto e vengono mostrate ordinate correttamente comprese quelle con il campo vuoto, con una differenza nella formattazione della data che è 13-SET-2023 e non 13-SET-23 come per quelle con il campo compilato . Quindi come dici tu sarebbe meglio semplificare usandone solo uno, eliminandolo o rendendolo obbligatorio.

zetareticoli commented 1 year ago

In subordine, se non si vogliono cambiare troppo le cose, si può invece rendere obbligatorio il postmeta. A questo punto, tutti gli ordinamenti avvengono sempre solo per quel campo, e diventano meglio realizzabili, anche via WP_Meta_Query (che ad. es. si può passare alle procedure ajax lasciandole quasi come sono ora).

Opterei per questa soluzione.

La funzione load_more è stata sviluppata in modo "univoco" per post_type differenti (servizi, documenti ,notizie) che esigono invece ordinamenti differenziati:

@enrimk se hai una soluzione già sviluppata, puoi proporla come PR

enrimk commented 1 year ago

@zetareticoli @astagi Segnalo che la #387 NON ha risolto questo issue.

Anzi, non l'ha neppure affrontato. Le incongruenze nell'ordinamento causate dalla sovrapposizione di _postdate e _datapubblicazione rimangono tutte.

Come minimo, load_more() allora dovrebbe usare la stessa strategia di ordinamento di tutte-novita.php (che però non mi sembra ottimale, o consigliabile). E anche le notizie in homepage.

se hai una soluzione già sviluppata, puoi proporla come PR

Non ne ho una da proporre già pronta, proprio perché la questione richiede probabilmente di ridiscutere alcuni campi della struttura dati originaria: forse è un tema che può coinvolgere anche il design dell'architettura info?

last-core commented 11 months ago

Novità riguardo questa issue?

EDIT: ho risolto nel mio fork così considerando che le date vengono salvate da cmb2 in formato epoch sono ordinabili se tipizzate a numeric

EDIT2: Questo presume però che il campo "data_pubblicazione" sia sempre compilato per il post_type notizia, perciò non è retrocompatibile per notizie che non hanno compilato il suddetto campo

zetareticoli commented 11 months ago

Ciao @last-core, grazie per aver condiviso la tua soluzione anche se non credo applicabile su larga scala.

No, non abbiamo altre notizie in merito a questa issue in quanto la modifica apporta in #387 risolve limitatamente il problema. Come dice @enrimk c'è un problema sulla base dati originaria che adesso non può essere affrontata.