✅ Notizie, temi, plugin WEB e WordPress. Qui condividiamo suggerimenti e le migliori soluzioni per siti web.

Impaginazione di WordPress: una semplice utilità (e perché)

46

Quando crei modelli per WordPress, in genere hai funzioni di impaginazione che provengono dall’applicazione stessa.

Questi includono cose come:

E ci sono alcuni altri post che ti danno una maggiore granularità sulle tassonomie come get_adjacent_post().

Raccomando di leggere tutti i link sopra perché sono utili se stai creando un tema, lavorando con tipi di post personalizzati o semplicemente stai cercando una comprensione più profonda di alcuni dei tag template comuni.

Se, tuttavia, stai cercando un modo semplice per scrivere l’utilità di impaginazione di WordPress (di cui spiegherò momentaneamente il motivo), il resto di questo post tratterà esattamente questo.

Impaginazione WordPress personalizzata

Innanzitutto, ogni volta che crei un’applicazione web per qualcuno, è inevitabile che ci siano delle sfumature in cui la funzionalità nativa di WordPress potrebbe non funzionare. Forse non funziona come previsto, non funziona come previsto o non soddisfa le tue esigenze.

In ogni caso, ciò non significa che l’impaginazione non possa essere costruita per soddisfare i tuoi scopi. Dopotutto, il nucleo dell’impaginazione, soprattutto per quanto riguarda l’impaginazione di un singolo post, è fondamentalmente questo:

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.

Da qui, possiamo determinare che avremo bisogno delle seguenti funzionalità:

  1. un modo per determinare se esiste un post dietro il post corrente,
  2. un modo per determinare se esiste un post dopo il post corrente,
  3. un modo per recuperare un determinato post,
  4. un modo per ottenere il permalink per il post specificato.

Tuttavia, lavoro per essere molto particolare nella lingua sopra, perché un post che è "dietro" o "dopo" un determinato post potrebbe non avere un ID uno in meno rispetto all’ID del post corrente.

È semplicemente il primo post che viene pubblicato e può essere recuperato in entrambe le direzioni, giusto?

Quindi, con questo in mente, questo significa che avremo bisogno di due domande:

  • una query per recuperare il post dietro il post corrente,
  • una query per recuperare il post dopo il post corrente.

Per questo esempio, presumo che tu abbia accesso all’ID del post corrente tramite la funzione get_the_ID().

Ottieni un post dietro il post corrente

Per fare ciò, 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.

Possiamo farlo limitando il set di risultati a uno, ordinando i risultati in ordine decrescente e confrontando il valore dell’ID post:

<?php

global $wpdb;
$results = $wpdb->get_results(
    $wpdb->prepare(
        "
        SELECT *
        FROM $wpdb->posts
        WHERE ID < (SELECT ID
            FROM $wpdb->posts
            WHERE ID = %d
            AND post_type = '%s'
            AND post_status = '%s'
            ORDER BY ID DESC) AND post_type = '%s'
        AND post_status = '%s'
        ORDER BY ID DESC
        LIMIT 1
        ",
        get_the_ID(),
        'acme-custom-post-type',
        'publish',
        'acme-custom-post-type',
        'publish') );

Questo restituirà una serie di risultati che vedremo come gestire tra poco.

Ottieni il post dopo il post corrente

Per il prossimo post, scriviamo una query simile. Invece, cerchiamo il valore successivo più grande e che precede l’ID corrente:

<?php

global $wpdb;
$results = $wpdb->get_results(
    $wpdb->prepare(
        "
        SELECT *
        FROM $wpdb->posts
        WHERE ID > (SELECT ID
            FROM $wpdb->posts
            WHERE ID = %d
            AND post_type = '%s'
            AND post_status = '%s'
            ORDER BY ID ASC) AND post_type = '%s'
        AND post_status = '%s'
        ORDER BY ID ASC
        LIMIT 1
        ",
        get_the_ID(),
        'acme-custom-post-type',
        'publish',
        'acme-custom-post-type',
        'publish') );

Ora abbiamo bisogno di alcune funzioni per determinare se i post esistono. Possiamo farlo con l’array di risultati che viene restituito.

Controlla se esiste un post

Si noti che nell’esempio seguente, la funzione accetta l’array di risultati e restituisce semplicemente se è presente un post precedente. I risultati che vengono passati a questa funzione dovrebbero provenire dalla precedente query del post precedente.

In secondo luogo, nota che è privato. Potresti voler rendere il tuo pubblico a seconda di come vuoi costruire i tuoi modelli.

<?php 
/**
 * @param array $results the results of the query to determined if there are past posts
 *
 * @return bool true if there is a previous post; otherwise, false
 */
private function hasPreviousPost($results)
{
    return isset($results[0]);
}

E poi per il prossimo post, sembra lo stesso, ma ricorda che i risultati che vengono passati a questa funzione provengono da una query diversa.

<?php
/**
 * @param array $results the results of the query to determined if there are future posts
 *
 * @return bool true if there is a next post; otherwise, false
 */
private function hasNextPost($results)
{
    return isset($results[0]);
}

E infine, possiamo usare queste funzioni condizionali per ottenere il permalink.

Ottieni il collegamento

Ricorda, il modo in cui usi questa funzione può variare rispetto all’implementazione che ho fornito. Quindi, se non hai bisogno che sia privato, modifica la sua visibilità e usalo nel tuo modello secondo necessità.

<?php
/**
 * @param array $results the results of the array from which to retrieve the post ID
 *
 * @return string the ID of the post to which we're going to link
 */
private function getPostLink($results)
{
    return get_the_permalink($results[0]->ID);
}

Infine, nota che questa funzione accetta i risultati che ci passi da entrambe le query e recupererà la proprietà ID dal primo indice dei risultati.

Questo perché i risultati sono limitati a uno e si basano sull’uso delle funzioni condizionali. Cioè, puoi fare qualcosa come:

  • se c’è un prossimo post, ottieni il link del prossimo post

Ma la tua implementazione può variare.

Perché è necessario?

Potrebbe non essere necessario. Questo è tutto: se stai utilizzando WordPress pronto all’uso con pochissime personalizzazioni o estensioni e non hai bisogno di fare nulla oltre a ciò che può fornire, allora potresti non aver bisogno di questo.

Se, d’altra parte, stai cercando un modo per introdurre la funzionalità di impaginazione di WordPress su un singolo post, allora questo è 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).

Fonte di registrazione: tommcfarlin.com

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More