{"id":231459,"date":"2022-12-16T10:21:00","date_gmt":"2022-12-16T07:21:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231459"},"modified":"2022-12-07T11:40:16","modified_gmt":"2022-12-07T08:40:16","slug":"impaginazione-di-wordpress-una-semplice-utilita-e-perche","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/impaginazione-di-wordpress-una-semplice-utilita-e-perche\/","title":{"rendered":"Impaginazione di WordPress: una semplice utilit\u00e0 (e perch\u00e9)"},"content":{"rendered":"\n<p>Quando crei modelli per WordPress, in genere hai funzioni di impaginazione che provengono dall&#8217;applicazione stessa.<\/p>\n<p>Questi includono cose come:<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/get_next_post\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">get_next_post()<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/get_next_post_link\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">get_next_post_link()<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/get_previous_post\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">get_previous_post()<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/get_previous_post_link\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">get_previous_post_link()<\/a><\/li>\n<\/ul>\n<p>E ci sono alcuni altri post che ti danno una maggiore granularit\u00e0 sulle tassonomie come <strong><a href=\"https:\/\/tommcfarlin.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">get_adjacent_post()<\/a><\/strong>.<\/p>\n<p>Raccomando di leggere tutti i link sopra perch\u00e9 sono utili se stai creando un tema, lavorando con tipi di post personalizzati o semplicemente stai cercando una comprensione pi\u00f9 profonda di alcuni dei tag template comuni.<\/p>\n<p>Se, tuttavia, stai cercando un modo semplice per scrivere l&#8217;utilit\u00e0 di impaginazione di WordPress (di cui spiegher\u00f2 momentaneamente il motivo), il resto di questo post tratter\u00e0 esattamente questo.<\/p>\n<h2>Impaginazione WordPress personalizzata<\/h2>\n<p>Innanzitutto, ogni volta che crei un&#8217;applicazione web per qualcuno, \u00e8 inevitabile che ci siano delle sfumature in cui la funzionalit\u00e0 nativa di WordPress potrebbe non funzionare. Forse non funziona come previsto, non funziona come previsto o non soddisfa le tue esigenze.<\/p>\n<p>In ogni caso, ci\u00f2 non significa che l&#8217;impaginazione non possa essere costruita per soddisfare i tuoi scopi. Dopotutto, il nucleo dell&#8217;impaginazione, soprattutto per quanto riguarda l&#8217;impaginazione di un singolo post, \u00e8 fondamentalmente questo:<\/p>\n<p>Dal post corrente, controlla se esiste un post prima di esso e verifica se esiste un post dopo di esso. Se esistono entrambi i tipi di post, fornire un collegamento ad esso; altrimenti, non farlo.<\/p>\n<p>Da qui, possiamo determinare che avremo bisogno delle seguenti funzionalit\u00e0:<\/p>\n<ol>\n<li>un modo per determinare se esiste un post dietro il post corrente,<\/li>\n<li>un modo per determinare se esiste un post dopo il post corrente,<\/li>\n<li>un modo per recuperare un determinato post,<\/li>\n<li>un modo per ottenere il permalink per il post specificato.<\/li>\n<\/ol>\n<p>Tuttavia, lavoro per essere molto particolare nella lingua sopra, perch\u00e9 un post che \u00e8 &quot;dietro&quot; o &quot;dopo&quot; un determinato post potrebbe non avere un ID uno in meno rispetto all&#8217;ID del post corrente.<\/p>\n<p>\u00c8 semplicemente il primo post che viene pubblicato e pu\u00f2 essere recuperato in entrambe le direzioni, giusto?<\/p>\n<p>Quindi, con questo in mente, questo significa che avremo bisogno di due domande:<\/p>\n<ul>\n<li>una query per recuperare il post dietro il post corrente,<\/li>\n<li>una query per recuperare il post dopo il post corrente.<\/li>\n<\/ul>\n<p>Per questo esempio, presumo che tu abbia accesso all&#8217;ID del post corrente tramite la funzione <strong><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/get_the_id\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">get_the_ID()<\/a><\/strong>.<\/p>\n<h3>Ottieni un post dietro il post corrente<\/h3>\n<p>Per fare ci\u00f2, dobbiamo creare una semplice query che catturi un post pubblicato dal database del tipo di post specificato e che sia correlato alla posizione del post corrente.<\/p>\n<p><strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/763a68936f225834bba671a3d0a8b9f6#file-00-previous-post-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Possiamo farlo<\/a><\/strong> limitando il set di risultati a uno, ordinando i risultati in ordine decrescente e confrontando il valore dell&#8217;ID post:<\/p>\n<pre><code>&lt;?php\n\nglobal $wpdb;\n$results = $wpdb-&gt;get_results(\n    $wpdb-&gt;prepare(\n        \"\n        SELECT *\n        FROM $wpdb-&gt;posts\n        WHERE ID &lt; (SELECT ID\n            FROM $wpdb-&gt;posts\n            WHERE ID = %d\n            AND post_type = '%s'\n            AND post_status = '%s'\n            ORDER BY ID DESC) AND post_type = '%s'\n        AND post_status = '%s'\n        ORDER BY ID DESC\n        LIMIT 1\n        \",\n        get_the_ID(),\n        'acme-custom-post-type',\n        'publish',\n        'acme-custom-post-type',\n        'publish') );<\/code><\/pre>\n<p>Questo restituir\u00e0 una serie di risultati che vedremo come gestire tra poco.<\/p>\n<h3>Ottieni il post dopo il post corrente<\/h3>\n<p><strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/763a68936f225834bba671a3d0a8b9f6#file-01-next-post-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Per il prossimo post<\/a><\/strong>, scriviamo una query simile. Invece, cerchiamo il valore successivo pi\u00f9 grande e che precede l&#8217;ID corrente:<\/p>\n<pre><code>&lt;?php\n\nglobal $wpdb;\n$results = $wpdb-&gt;get_results(\n    $wpdb-&gt;prepare(\n        \"\n        SELECT *\n        FROM $wpdb-&gt;posts\n        WHERE ID &gt; (SELECT ID\n            FROM $wpdb-&gt;posts\n            WHERE ID = %d\n            AND post_type = '%s'\n            AND post_status = '%s'\n            ORDER BY ID ASC) AND post_type = '%s'\n        AND post_status = '%s'\n        ORDER BY ID ASC\n        LIMIT 1\n        \",\n        get_the_ID(),\n        'acme-custom-post-type',\n        'publish',\n        'acme-custom-post-type',\n        'publish') );<\/code><\/pre>\n<p>Ora abbiamo bisogno di alcune funzioni per determinare se i post esistono. Possiamo farlo con l&#8217;array di risultati che viene restituito.<\/p>\n<h3>Controlla se esiste un post<\/h3>\n<p>Si noti che <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/763a68936f225834bba671a3d0a8b9f6#file-03-has-previous-post-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">nell&#8217;esempio seguente<\/a><\/strong>, la funzione accetta l&#8217;array di risultati e restituisce semplicemente se \u00e8 presente un post precedente. I risultati che vengono passati a questa funzione dovrebbero provenire dalla precedente query del post precedente.<\/p>\n<p>In secondo luogo, nota che \u00e8 privato. Potresti voler rendere il tuo pubblico a seconda di come vuoi costruire i tuoi modelli.<\/p>\n<pre><code>&lt;?php \n\/**\n * @param array $results the results of the query to determined if there are past posts\n *\n * @return bool true if there is a previous post; otherwise, false\n *\/\nprivate function hasPreviousPost($results)\n{\n    return isset($results[0]);\n}<\/code><\/pre>\n<p>E poi <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/763a68936f225834bba671a3d0a8b9f6#file-04-has-next-post-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">per il prossimo post,<\/a><\/strong> sembra lo stesso, ma ricorda che i risultati che vengono passati a questa funzione provengono da una query diversa.<\/p>\n<pre><code>&lt;?php\n\/**\n * @param array $results the results of the query to determined if there are future posts\n *\n * @return bool true if there is a next post; otherwise, false\n *\/\nprivate function hasNextPost($results)\n{\n    return isset($results[0]);\n}<\/code><\/pre>\n<p>E infine, possiamo usare queste funzioni condizionali per ottenere il permalink.<\/p>\n<h3>Ottieni il collegamento<\/h3>\n<p>Ricorda, il modo in cui usi questa funzione pu\u00f2 variare rispetto all&#8217;implementazione che ho fornito. Quindi, se non hai bisogno che sia privato, modifica la sua visibilit\u00e0 e usalo nel tuo modello secondo <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/763a68936f225834bba671a3d0a8b9f6#file-05-get-post-link-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">necessit\u00e0<\/a><\/strong>.<\/p>\n<pre><code>&lt;?php\n\/**\n * @param array $results the results of the array from which to retrieve the post ID\n *\n * @return string the ID of the post to which we're going to link\n *\/\nprivate function getPostLink($results)\n{\n    return get_the_permalink($results[0]-&gt;ID);\n}<\/code><\/pre>\n<p>Infine, nota che questa funzione accetta i risultati che ci passi da entrambe le query e recuperer\u00e0 la propriet\u00e0 ID dal primo indice dei risultati.<\/p>\n<p>Questo perch\u00e9 i risultati sono limitati a uno e si basano sull&#8217;uso delle funzioni condizionali. Cio\u00e8, puoi fare qualcosa come:<\/p>\n<ul>\n<li>se c&#8217;\u00e8 un prossimo post, ottieni il link del prossimo post<\/li>\n<\/ul>\n<p>Ma la tua implementazione pu\u00f2 variare.<\/p>\n<h2>Perch\u00e9 \u00e8 necessario?<\/h2>\n<p>Potrebbe non essere necessario. Questo \u00e8 tutto: se stai utilizzando WordPress pronto all&#8217;uso con pochissime personalizzazioni o estensioni e non hai bisogno di fare nulla oltre a ci\u00f2 che pu\u00f2 fornire, allora potresti non aver bisogno di questo.<\/p>\n<p>Se, d&#8217;altra parte, stai cercando un modo per introdurre la funzionalit\u00e0 di impaginazione di WordPress su un singolo post, allora questo \u00e8 un modo per farlo in grado di gestire correttamente il caso di post che sono di un tipo specifico di post ma non t ha ID sequenziali (e che funzionano solo con uno stato di pubblicazione del post).<\/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>Quando si crea un&#8217;applicazione Web, \u00e8 inevitabile che ci siano sfumature in cui la funzionalit\u00e0 nativa potrebbe non funzionare. Potresti aver bisogno di un&#8217;impaginazione personalizzata di WordPress.<\/p>\n","protected":false},"author":1,"featured_media":236123,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[896,804,720,865],"tags":[1168],"class_list":["post-231459","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-php-6","category-sviluppatore","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231459","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=231459"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231459\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/236123"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=231459"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=231459"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=231459"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}