{"id":232271,"date":"2023-01-06T13:02:00","date_gmt":"2023-01-06T10:02:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=232271"},"modified":"2022-11-10T08:24:43","modified_gmt":"2022-11-10T05:24:43","slug":"aggiungi-una-visualizzazione-personalizzata-alla-schermata-tutti-i-post","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/aggiungi-una-visualizzazione-personalizzata-alla-schermata-tutti-i-post\/","title":{"rendered":"Aggiungi una visualizzazione personalizzata alla schermata Tutti i post"},"content":{"rendered":"\n<p><strong>TL; DR<\/strong>: lavorer\u00f2 su una serie che esaminer\u00e0 come ottenere un compito utile con le tassonomie, probabili categorie, quindi refactoring in un plug-in orientato agli oggetti che funger\u00e0 da plug-in di utilit\u00e0 per le tassonomie, in generale .<\/p>\n<hr \/>\n<h3>Una breve storia dei post OOP<\/h3>\n<p>Qualche tempo fa, ho fatto <a href=\"https:\/\/tommcfarlin.com\/tag\/oop-fundamentals\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">una lunga serie<\/a> sui principi della programmazione orientata agli oggetti (e ho cercato di condividere una discreta quantit\u00e0 su come ottenere determinate cose nel contesto di WordPress).<\/p>\n<p>Ho anche scritto un sacco di articoli sull&#8217;intero paradigma nel corso degli anni per coloro che sono interessati a recuperare il ritardo su <a href=\"https:\/\/tommcfarlin.com\/tag\/object-oriented-programming\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">alcuni di quegli articoli<\/a>.<\/p>\n<p>E sarei negligente se non dicessi che anche <a href=\"https:\/\/twitter.com\/twigpress\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">un mio caro amico<\/a> ha scritto un <a href=\"https:\/\/tommcfarlin.com\/object-oriented-programming-using-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">libro sull&#8217;argomento<\/a>.<\/p>\n<p>E quindi, poich\u00e9 ho pensato a vari argomenti su cui scrivere (dopo aver preso un periodo di tempo pi\u00f9 lungo del previsto), ho pensato che potesse valere la pena parlare di cose pratiche che possiamo fare con normali API e hook e poi refactoring in un tipo di plug-in di utilit\u00e0.<\/p>\n<h2>Aggiungi una vista personalizzata<\/h2>\n<p>Ai fini del lavoro che condivider\u00f2 in questa demo, utilizzo quanto segue:<\/p>\n<ul>\n<li><a href=\"https:\/\/localwp.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Locale di Flywheel<\/a> con un <code>https:\/\/sandbox.local<\/code>dominio<\/li>\n<li><a href=\"https:\/\/www.tableplus.io\/download\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">TablePlus<\/a> per l&#8217;accesso al database<\/li>\n<li><a href=\"https:\/\/code.visualstudio.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Codice di Visual Studio<\/a> come mio IDE<\/li>\n<li>E gli <a href=\"https:\/\/github.com\/WebDevStudios\/php-coding-standards\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">standard di codifica PHP WDS<\/a> per tutto il PHP che vedrai.<\/li>\n<\/ul>\n<p>Se vuoi seguire quello che sto succedendo, usa tutto quanto sopra (non so se condivider\u00f2 tutto ma se vedi screenshot e frammenti di codice, saprai da dove viene ).<\/p>\n<p>Detto questo, ecco una breve digressione su <code>views<\/code>WordPress (e non \u00e8 come Views nel senso di <a href=\"https:\/\/en.wikipedia.org\/wiki\/Model%E2%80%93view%E2%80%93controller\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">MVC<\/a> o <a href=\"https:\/\/en.wikipedia.org\/wiki\/Model%E2%80%93view%E2%80%93viewmodel\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">MVVM<\/a> ).<\/p>\n<h3>Viste di WordPress<\/h3>\n<p>Al momento in cui scrivo, non sembra esserci una dichiarazione chiara e concisa su cosa sia una vista di WordPress. In termini di hook disponibile, abbiamo <code>views_edit-post<\/code>.<\/p>\n<p>Quindi, se prendiamo quel particolare hook e quello che fa, forse qualcosa del genere sarebbe sufficiente:<\/p>\n<p>Una vista WordPress \u00e8 una pagina in cui possiamo visualizzare tutti i post conformi a una serie di criteri specificati.<\/p>\n<p>Fuori dagli schemi, questo criterio di solito include post come:<\/p>\n<ul>\n<li>Pubblicato,<\/li>\n<li>Bozze,<\/li>\n<li>Spazzatura,<\/li>\n<li>Programmato,<\/li>\n<li>E cos\u00ec via.<\/li>\n<\/ul>\n<p>Ma cosa succede se hai un altro post che ha altri criteri in base ai quali desideri filtrare? Certo, puoi filtrare in base alla casella a discesa presente sullo schermo (ad esempio per categoria) e va bene, ma cosa succede se si desidera utilizzare un criterio personalizzato per [qualsiasi motivo]?<\/p>\n<p>Ad esempio, cosa succede se non si desidera dover fare clic su un determinato elemento, quindi filtrare e visualizzare i post? Vuoi invece vedere un link ai criteri, il numero di post che soddisfano i criteri e poi filtrarli in base a questi?<\/p>\n<p>\u00c8 qui che entra in gioco la possibilit\u00e0 di modificare le visualizzazioni.<\/p>\n<p>E ai fini di questo post, tratter\u00f2 come introdurre una nuova ancora nella parte superiore della pagina che elencher\u00e0 il numero di post per una categoria specificata.<\/p>\n<h3>Qual \u00e8 il nostro punto di vista?<\/h3>\n<p>In questo caso, useremo Uncategorized perch\u00e9 un&#8217;installazione predefinita ha gi\u00e0 un post non categorizzato disponibile e possiamo facilmente modificare alcune modifiche attorno a questo.<\/p>\n<p>Per fare ci\u00f2, scriveremo un file <code>mu-plugin<\/code>in modo che venga inserito nella <code>mu-plugins<\/code>directory. Se la tua installazione non ne ha una, aggiungi la directory e quindi aggiungi <code>add-custom-view.php<\/code>alla directory:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-158448-61e6de802d2a6.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-158448-61e6de802d2a6.png\" alt=\"Aggiungi una visualizzazione personalizzata alla schermata Tutti i post\" ><\/a><\/p>\n<p>Da l\u00ec, il file del plugin iniziale potrebbe assomigliare a questo:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-158448-61e6de83d7406.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-158448-61e6de83d7406.png\" alt=\"Aggiungi una visualizzazione personalizzata alla schermata Tutti i post\" ><\/a><\/p>\n<p>Inizialmente, stiamo facendo quanto segue:<\/p>\n<ol>\n<li>Impostazione di uno spazio dei nomi,<\/li>\n<li>Aggiungendo un filtro,<\/li>\n<li>Quindi imposta la funzione che accetter\u00e0 il set predefinito <code>$views<\/code>e restituir\u00e0 l&#8217;array di <code>$views<\/code>dopo che sono stati modificati.<\/li>\n<\/ol>\n<p>Quindi cosa dobbiamo fare da qui?<\/p>\n<h3>L&#8217;insieme dei requisiti<\/h3>\n<p>Per ottenere ci\u00f2 che vogliamo, dobbiamo essere in grado di:<\/p>\n<ul>\n<li>Specificare il nome della categoria,<\/li>\n<li>Aggiungi il link alla categoria insieme al numero di post con quella categoria all&#8217;elenco delle visualizzazioni,<\/li>\n<li>La possibilit\u00e0 di determinare se siamo nella pagina delle categorie per definire correttamente lo stile dell&#8217;elenco<\/li>\n<li>La possibilit\u00e0 di filtrare per tipo di post,<\/li>\n<li>E un modo per testarlo.<\/li>\n<\/ul>\n<p>Tutto quanto sopra sar\u00e0 trattato nel codice pi\u00f9 avanti nell&#8217;articolo, ma il quinto passaggio richiede la creazione manuale di una categoria in modo da poter testare facilmente se il resto del codice funziona.<\/p>\n<p>Quindi vai avanti e fallo. La categoria pu\u00f2 essere chiamata qualsiasi cosa (ho usato Categoria di esempio). Una volta terminato, scriviamo il codice dal resto del plugin.<\/p>\n<h4>Determina il nostro punto di vista<\/h4>\n<p>Innanzitutto, condivider\u00f2 una funzione che determiner\u00e0 in quale pagina ci troviamo e far\u00e0 una delle due cose:<\/p>\n<ul>\n<li>Se siamo su una pagina che ha lo stesso parametro della stringa di query per l&#8217;ID della nostra categoria, fornir\u00f2 un nome di classe; in caso contrario, restituiremo una stringa vuota.<\/li>\n<\/ul>\n<p>Per fare ci\u00f2, la funzione dovrebbe:<\/p>\n<ol>\n<li>Accetta un nome di categoria,<\/li>\n<li>Inizializzare una variabile per gli attributi,<\/li>\n<li>Confronta le variabili della stringa di query<\/li>\n<li>Determina se il nome della categoria e l&#8217;ID della categoria sono gli stessi,<\/li>\n<li>E restituire il valore corretto, in caso contrario.<\/li>\n<\/ol>\n<p>Ecco come appare la mia funzione:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-158448-61e6de8684cf5.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-158448-61e6de8684cf5.png\" alt=\"Aggiungi una visualizzazione personalizzata alla schermata Tutti i post\" ><\/a><\/p>\n<p>Questo potrebbe anche essere semplificato con un operatore ternario, ma per mantenerlo il pi\u00f9 leggibile possibile, lo lascio cos\u00ec com&#8217;\u00e8 per ora.<\/p>\n<h4>Determina il nome della categoria<\/h4>\n<p>Questa particolare funzionalit\u00e0 \u00e8 in realt\u00e0 molto semplice e sebbene siamo abituati a ricevere input dagli utenti in gran parte di ci\u00f2 che facciamo, eseguiremo l&#8217;hardcoding di questo valore.<\/p>\n<p>Per fare ci\u00f2, memorizzeremo semplicemente questo in una variabile che verr\u00e0 passata nel resto del codice.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-158448-61e6de8963b8b.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-158448-61e6de8963b8b.png\" alt=\"Aggiungi una visualizzazione personalizzata alla schermata Tutti i post\" ><\/a><\/p>\n<p>Hai visto la variabile passata in precedenza nella funzione precedente e la vedrai usata anche nella versione finale del codice sorgente.<\/p>\n<h4>Recupera i risultati dei post con la categoria<\/h4>\n<p>Per questo, dobbiamo fare due cose:<\/p>\n<ol>\n<li>Recupera tutti i <code>object_id<\/code>record che hanno l&#8217;ID di questa categoria,<\/li>\n<li>Filtra i contenuti che non sono per questi post.<\/li>\n<\/ol>\n<p>Ci sono un paio di cose che voglio menzionare qui: in primo luogo, utilizzeremo la <code>get_cat_ID<\/code>funzione fornita da WordPress. Questo recupera l&#8217;ID della categoria in base al nome in entrata.<\/p>\n<p>In secondo luogo, sto usando due funzioni, una delle quali \u00e8 un ciclo, per esaminare lo stato del post di un elemento. Questo non \u00e8 il modo pi\u00f9 efficiente per farlo. Invece, potremmo usare una query pi\u00f9 elegante per recuperare solo i post; tuttavia, la prima iterazione di questo ha lo scopo di mostrare come non solo farlo da zero, ma anche per un pubblico che potrebbe non essere cos\u00ec a suo agio con altri aspetti della scrittura del codice.<\/p>\n<p>Detto questo, ecco come otteniamo tutti i record in WordPress contrassegnati come Non categorizzati.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-158448-61e6de8c7738c.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-158448-61e6de8c7738c.png\" alt=\"Aggiungi una visualizzazione personalizzata alla schermata Tutti i post\" ><\/a><\/p>\n<p>E con ci\u00f2, prendiamo i risultati e li inviamo in questa funzione che restituir\u00e0 il numero di elementi che sono solo post.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-158448-61e6de8fa1d77.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-158448-61e6de8fa1d77.png\" alt=\"Aggiungi una visualizzazione personalizzata alla schermata Tutti i post\" ><\/a><\/p>\n<p>Con ci\u00f2, abbiamo la maggior parte di ci\u00f2 di cui abbiamo bisogno per iniziare a mettere insieme il nostro punto di vista.<\/p>\n<h4>Genera un&#8217;ancora di visualizzazione<\/h4>\n<p>Ora che abbiamo tutte le funzioni necessarie per generare un&#8217;ancora di visualizzazione, dobbiamo metterle insieme al posto di <code>sprintf<\/code>una formattazione sicura delle stringhe.<\/p>\n<p>L&#8217;obiettivo \u00e8 generare un&#8217;ancora che:<\/p>\n<ul>\n<li>Sembra il resto delle ancore,<\/li>\n<li>Mostra il numero di post,<\/li>\n<li>\u00c8 in grassetto ogni volta che visualizzi detti post.<\/li>\n<\/ul>\n<p>Per fare ci\u00f2, dobbiamo creare il collegamento e aggiungere gli argomenti della stringa di query appropriati. Ci\u00f2 significa che imposteremo un collegamento <code>edit.php<\/code>con argomenti per:<\/p>\n<ul>\n<li>l&#8217;ID della categoria,<\/li>\n<li>il tipo di post di post,<\/li>\n<li>e tutti i post che hanno questa categoria.<\/li>\n<\/ul>\n<p>Successivamente, dovremo includere:<\/p>\n<ul>\n<li>qualsiasi attributo per definire lo stile del collegamento,<\/li>\n<li>il nome della categoria,<\/li>\n<li>e solo il contenuto del post <code>post_type<\/code>.<\/li>\n<\/ul>\n<p>Per fare ci\u00f2, possiamo utilizzare la seguente funzione:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-158448-61e6de92c2f38.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-158448-61e6de92c2f38.png\" alt=\"Aggiungi una visualizzazione personalizzata alla schermata Tutti i post\" ><\/a><\/p>\n<p>Questo fa diverse cose:<\/p>\n<ol>\n<li>Accetta l&#8217;array standard di <code>$views<\/code>da WordPress,<\/li>\n<li>Aggiunge il nostro ancoraggio personalizzato come descritto sopra,<\/li>\n<li>Lo inserisce <code>$views<\/code>nell&#8217;array,<\/li>\n<li>Lo restituisce a WordPress per il rendering.<\/li>\n<\/ol>\n<p>E questo \u00e8 tutto!<\/p>\n<h4>Testandolo<\/h4>\n<p>Per testare questo, carica il tuo browser e dovresti vedere un nuovo link Uncategorized accanto al resto delle ancore come Tutto, Pubblicato, Mio, Cestino, Programmato, ecc.<\/p>\n<p>Dopodich\u00e9, cambia una categoria di post e rimuovi Uncategorized, quindi rivisita o aggiorna la pagina Tutti i post e vedrai che il link \u00e8 attivo e con uno stile, a seconda di come lo stai visualizzando, e include il numero di post classificati anche come tale.<\/p>\n<h2>Ora, su GitHub<\/h2>\n<p>Ho caricato <a href=\"https:\/\/github.com\/tommcfarlin\/add-custom-view\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la prima iterazione di questo plugin su GitHub in<\/a> modo che tu possa scaricarlo e inserirlo nella tua <code>mu-plugins<\/code>directory per il test.<\/p>\n<p>Nei prossimi post, vorrei iniziare cambiando questo in un paradigma orientato agli oggetti, in modo che quelli siano i cambiamenti che stanno arrivando al plugin e il contenuto che arriver\u00e0 nei post futuri.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Con questo mu-plugin, mostro come aggiungere una visualizzazione personalizzata alla pagina Tutti i post di WordPress in base a una categoria specifica.<\/p>\n","protected":false},"author":1,"featured_media":158449,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[896,835,804,844,865],"tags":[1168],"class_list":["post-232271","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-guida-per-principianti","category-php-6","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/232271","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=232271"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/232271\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/158449"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=232271"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=232271"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=232271"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}