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

Sulla scrittura di funzioni WordPress leggibili

16

Una delle cose che trovo costantemente interessante (sia dal punto di vista della programmazione che dal punto di vista di WordPress), è questa:

Mi piace mantenere il codice separato in modo tale che il codice responsabile dell’interazione con WordPress sia relegato nel suo spazio dei nomi mentre il resto del nostro codice è posizionato in modo appropriato altrove.

Penso che questo sia ovvio, però.

Quando si tratta di scrivere codice, tuttavia, questo non significa che debba essere lasciato semplicemente al modo in cui scriviamo le nostre classi e poi le organizziamo. E le cose a un livello leggermente più granulare?

Cioè, e se dovessimo considerare i metodi come parte di un insieme più ampio e assicurarci che anche loro stiano facendo bene il loro lavoro? Certo, persone come Bob Martin hanno scritto di questo genere di cose per la maggior parte della loro carriera e le hanno predicate a persone come noi.

Ma questi concetti sono qualcosa che inizi semplicemente a fare e poi li applichi per sempre. I paradigmi cambiano, oggi siamo migliori di ieri e potrebbero esserci diversi modi per ottenere lo stesso tipo di cose.

Quindi, quando si tratta di creare funzioni WordPress leggibili per un dominio specifico, come potrebbe essere?

Funzioni WordPress leggibili

Per coloro che hanno familiarità con i principi SOLID o qualsiasi cosa che parli di scrivere un buon codice, una delle cose di cui molte di quelle persone scrivono è la lunghezza a cui dovrebbe essere un metodo.

Tendo a prenderle come regole piuttosto che come leggi perché a volte i metodi non possono essere così brevi. Voglio dire, immagino che potrebbero, ma a un certo punto sembra una microgestione del codice, giusto?

E fare qualcosa per il bene di fare è una cosa, ma fare qualcosa per il bene di una programmazione significativa è un’altra. Sceglierò il più tardi ogni volta.

Ad ogni modo, ecco un esempio: diciamo che hai del codice che viene chiamato tramite Ajax e prima di procedere con l’operazione, devi sapere se esiste un tipo di post personalizzato.

I passaggi per fare qualcosa del genere potrebbero essere i seguenti:

  • avviare la chiamata Ajax,
  • controlla la sicurezza nonce per verificare che sia una richiesta valida,
  • verificare se i dati esistono,
  • in tal caso, restituisci un messaggio di successo; in caso contrario, restituisce un messaggio di errore.

Tutto questo può essere fatto all’interno di un singolo messaggio, certo, ma assumiamo di volerlo scrivere in una serie di chiamate di facile lettura in cui il codice si auto-documenta, in una certa misura (questo non significa che io Sono contrario ai commenti – non lo sono affatto, ma ciò non significa che vogliamo che il nostro codice non sia chiaro, vero?).

Innanzitutto, l’Ajax chiama :

$.get(ajaxurl, {
    'action': 'getDetails',
    'security': $('input[name="acme-security-nonce"]').val()
}, function(response) {
    if (false === response.success) {
        // Handle the case when the request wasn't successful.
    }

    // Work with the information that was returned in the response.data property.
});

Quindi abbiamo una funzione lato server per verificare esplicitamente la sicurezza nonce (questo, ovviamente, presuppone che tu lo stia configurando correttamente sul front-end):

<?php
/**
 * @return bool true if we're able to make Ajax requests; otherwise, false
 */
private function verifyRequest()
{
    return
        isset($_GET['security']) &&
        wp_verify_nonce(strip_tags(stripslashes($_GET['security'])), 'getDetails');
}

Successivamente, vogliamo verificare se i dati esistono:

<?php

/**
 * @return bool true if there are details; false, otherwise
 *
 * @access private
 */
private function doDetailsExist()
{
    return (new WP_Query([
        'post_type' => 'acme_post_type',
        'post_status' => 'publish',
    ]))->have_posts();
}

Da qui, siamo quindi in grado di lavorare con l’oggetto risposta Ajax valutandone la proprietà success e reagendo di conseguenza.

Fare un passo avanti

Facciamo un ulteriore passo avanti e diciamo che i prodotti esistono e vogliamo recuperare tutti i loro ID post. Fare questo con WP_Query è abbastanza semplice ma diciamo, per i calci, vogliamo interfacciarci direttamente con il database.

Nota che questo è più un esercizio per mostrare un modo per fare qualcosa piuttosto che discutere per l’utilizzo di $wpdb su WP_Query. Questo è il contenuto per un altro post.

Sulla scrittura di funzioni WordPress leggibili

Ad ogni modo, quindi abbiamo determinato che i dati esistono. Quindi prendiamo un array di tutti gli ID post e lo restituiamo o un array vuoto. Forse questo sarebbe simile a questo:

<?php
/**
 * @return array a numerically indexed array of all detail IDs
*/
private function getDetailIds(): array
{
    global $wpdb;
    $results = $wpdb->get_results(
        $wpdb->prepare("
        SELECT meta_value
        FROM $wpdb->postmeta
        WHERE meta_key = %s
        ORDER BY meta_value ASC
        ", 'acme_detail_number'),
        ARRAY_N
    );

    $detailIds = [];
    array_push($detailIds, array_map(function ($result) {
        return $result[0];
    }, $results));

    return $detailIds[0] ?? $detailIds;
}

Una volta restituiti i valori, possiamo quindi operare su di essi come riteniamo opportuno.

Qual è lo scopo di tutto questo?

In generale, è per aiutarci a pensare al codice in modo tale da poterlo leggere il più vicino possibile alla parola scritta. Cioè, siamo in grado di indicare un pezzo di codice come dire:

Per prima cosa, vedremo se esiste qualcosa. In caso contrario, invieremo un errore; in caso contrario, prenderemo i dati e poi ci lavoreremo.

Certo, sto parlando in termini meno concreti qui, ma è perché non so necessariamente con cosa stai lavorando più di quanto tu sappia del mio lavoro. Ma ti sei fatto un’idea, vero?

E inoltre, se stai cercando di unit test del codice che è disaccoppiato da WordPress, questo può essere fatto attraverso l’uso di interfacce che deridono le funzioni o anche che eseguono query dirette sul database senza la necessità di utilizzare WordPress.

Ma, come con alcuni dei punti sopra menzionati, questo è argomento per un post diverso.

Attualmente sto scrivendo un eBook (insieme a una varietà di altri contenuti premium). Se sei interessato, controlla cosa ottieni.

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