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

Filtraggio corretto dei contenuti dei post (e comprensione di apply_filters)

24

Di tanto in tanto, ogni volta che lavoro con codice sorgente preesistente o eseguo un controllo del codice, vedrò altri modificare il contenuto del post di un oggetto post come questo :

<?php

$post->post_content = $my_content;

A questo punto, alcuni entreranno e diranno immediatamente che stai sbagliando. Odio quella frase (ed è persino disseminata in tutta la base di codice di WordPress, ma sto divagando).

Esistono modi per utilizzare altre funzioni API di WordPress esistenti per disinfettare i dati prima di impostarli su un valore uguale al valore dell’attributo post_content, l’utilizzo di quelle funzioni non è il modo migliore per farlo.

Invece, dovremmo usare tutti apply_filters. Il problema? Alcuni non sanno, alcuni non sanno come funziona e altri non sanno come usarlo. Non è chiaro come filtrare correttamente i contenuti dei post.

Contenuto grezzo filtrato da WordPress e poi scritto nel database.

Ma per coloro che possono rientrare in una qualsiasi delle categorie di cui sopra, forse questo può aiutare.

Filtrare correttamente i contenuti dei post

A questo punto, presumo che tu conosca WP_Post, le sue proprietà e come modificarle tramite varie funzioni API.

Il problema principale di cui sto parlando è assicurarsi che il contenuto che verrà scritto nel database sia formattato nello stesso modo in cui lo farebbe WordPress se dovessi scrivere o aggiornare un post.

E il modo in cui ciò accade è così (e arriveremo presto ai dettagli):

<?php

/**
 * Assume $contents is an array of information we want to convert into content for a post.
 */

$new_content = '';
foreach ($contents as $line) {

    if (false === strpos( $line, $name)) {
        $new_content .= $line;
    }
}

$post->post_content = apply_filters( 'the_content', $new_content );

Ma le domande su cosa fa questa funzione, come funziona e quando usarla rimangono.

Che cos’è apply_filters?

Certo, puoi leggere tutto su questo nelle Risorse per gli sviluppatori e dà questa definizione :

Chiama le funzioni aggiunte a un hook di filtro.

Ma questo non sempre aiuta. Voglio dire, possiamo leggere la documentazione e andarcene ancora confusi, giusto?

Pensaci in questo modo:

  1. Un filtro è una funzione che accetta input da elaborare.
  2. L’input viene elaborato in base alla definizione della funzione.
  3. La funzione restituisce quindi il valore elaborato.

Quello che fai con il valore restituito dipende da te, ma quando applichi un filtro o chiami apply_filters a un’informazione, stai dicendo a WordPress: "Ho queste informazioni, per favore applica il filtro identificato da questa chiave e consegna il risultato da me".

Non male, vero?

Come funziona?

Ma c’è una parte di quanto sopra che porta a una domanda. Nello specifico, cito che “…applica il filtro identificato da questa chiave…" e l’idea di una chiave può creare confusione soprattutto perché un filtro o un’azione o, più in generale, un hook può essere identificato da quello che viene chiamato tag o a chiave.

Sono sinonimi. Quindi, quando vedi tag o chiave nel contesto di un hook, trattali come tali.

Detto questo, ecco come funziona:

  1. La funzione apply_filters accetta due argomenti. Il primo è il tag o la chiave (a seconda di come lo vuoi chiamare) associato al filtro (leggi: funzione) che vuoi utilizzare per elaborare il lavoro, il secondo è il valore che vuoi elaborare all’interno di detta funzione.
  2. Il filtro si attiverà e restituirà un risultato (o, ricorda, la funzione che abbiamo definito).
  3. Quindi prendiamo il valore restituito e lo applichiamo a qualsiasi proprietà desideriamo.

Quindi, ad esempio, è probabile che tu veda qualcosa del genere nel codice di qualcun altro (o forse anche nel tuo):

<?php

$post->post_content = apply_filters( 'the_content', $my_content );

E ora che hai un po’ di contesto su come funziona, ti viene l’idea, giusto?

Come lo usiamo?

Questo porta il post al punto di partenza per la domanda iniziale su come possiamo usare apply_filters per post_content ogni volta che abbiamo bisogno di inserire o aggiornare un post.

Quindi supponiamo che tu abbia il contenuto che desideri applicare (o aggiungere) al valore del contenuto di un post. Potresti fare qualcosa del genere :

<?php

/**
 * Assume $contents is an array of information we want to convert into content for a post.
 */

$new_content = '';
foreach ($contents as $line) {

    if (false === strpos( $line, $name)) {
        $new_content .= $line;
    }
}

$post->post_content = $new_content;

Ma è una cattiva forma. Invece, fai questo :

<?php

/**
 * Assume $contents is an array of information we want to convert into content for a post.
 */

$new_content = '';
foreach ($contents as $line) {

    if (false === strpos( $line, $name)) {
        $new_content .= $line;
    }
}

$post->post_content = apply_filters( 'the_content', $new_content );

Ed è così che fa WordPress.

Conclusione

Quindi, date tutte le informazioni e il codice di cui sopra, dovresti essere ben armato non solo per assicurarti di filtrare correttamente i dati che verranno inseriti nel database, ma hai le conoscenze necessarie per definire i tuoi filtri e applicarli a qualsiasi dato tu ritenga opportuno.

Ma esempi per questo è contenuto per un altro post.

Nel frattempo, se stai lavorando con i contenuti dei post, assicurati di filtrare correttamente i dati prima di rilasciarli nel database.

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