Plugin

Rimuoviamo Alcuni Termini da Titolo e Contenuto

Introduzione

In questo articolo vediamo come creare un plugin per la rimozione di alcuni termini dal title e dal contenuto dei nostri post. Questa soluzione può tornare molto utile. ad esempio, su siti web con migliaia di contenuti che devono fare re-branding e hanno aggiunto il loro brand nel titolo o è presente nei contenuti oppure nei casi in cui ci sono delle policy che vietano l’utilizzo di un termine. Per seguire correttamente questo articolo è necessario avere buone basi relativamente ai filtri di WordPress e le relative funzioni, per questo facciamo una breve introduzione al concetto prima di creare il nostro plugin.

I Filtri di WordPress (filter hooks)

I filtri appartengono al secondo tipo di hook in WordPress, sono simili agli hook di azione per alcune caratteristiche. I filtri, a differenza degli action hook ci permettono ci danno la possibilità di manipolare come vogliamo gli output di codice.Vediamo come funziona apply_filters() in WordPress per comprendere la logica che sta dietro ai filtri.

<?php
apply_filters( string $tag, mixed $value );

la funzione accetta 2 o più parametri.

  • $tag: nome univoco per il filter hook
  • $value: il valore che viene passato a qualsiasi filtro aggiunto all’hook per la manipolazione
  • $args: come la funzione do_action() per gli hook di azione, la funzione accetta un numero qualsiasi di argomenti aggiuntivi da passare.

I filtri sono una comune funzione PHP che può essere chiamata quando necessario ma è diversa da una funzione in quanto deve essere registrata per un determinato filter hook.

Gli hook filter danno la possibilità agli sviluppatori di plugin di creare funzioni personalizzate che filtrano alcune tipologie di dati seguendo prestabilite indicazioni. quando la funzione apply_filters() viene chiamata ogni filtro agganciato ad essa viene eseguito seguendo l’ordine dato dalla priorità.

Per registrare un filtro dobbiamo utilizzare la funzione add_filter()

<?php
add_filter(
        string $tag,
        callable $function_to_add,
        int $priority = 10,
        int $accepted_args = 1
);

Ci sono molte funzioni per gli hook filter, come ad esempio:

remove_filter | remove_all_filters | apply_filters_ref_array | has_filter | current_filter. Per creare il nostro plugin ci soffermiamo su current_filter, la funzione che ci restituisce il nome del filter hook che è in esecuzione. È una funzione particolarmente utile se utilizziamo una singola funzione filtro o più filter hook. Ipotizziamo di avere la necessità, ad esempio su un sito web con molti articoli, di rimuovere uno o più termini dal page title e dal contenuto; questo può succedere in casi di re-branding oppure per motivazioni legali. In questo caso possiamo utilizzare una sola funzione current_filter() e determiniamo quale hook è in esecuzione (titolo o contenuto). Iniziamo a scrivere un pò di codice!

<?php
/**
 * Plugin Name: Elimina Stringa - Developress
 * Plugin URI:  https://www.developress.it
 * Description: Elimina i termini indesiderati dal page title e dal contenuto.
 * Author:      Developress
 * Author URI:  https://www.developress.it
 */

add_filter( 'the_title',   'developress_rimuovo_termini' );
add_filter( 'the_content', 'developress_rimuovo_termini' );

function developress_rimuovo_termini( $text ) {

	$termini = [];

	if ( 'the_title' === current_filter() ) {
		$termini = [
			'termine_1',
			'termine_2'
		];
	} elseif ( 'the_content' === current_filter() ) {
		$termini = [
			'termine_3',
			'termine_4'
		];
	}

// Ogni termine individuato viene sotituito con uno spazio utilizzando la funzione str_replace di PHP

	if ( $termini ) {
		$text = str_replace( $termini, ' ', $text );
	}

	return $text;
}

Il codice sopra può essere aggiunto direttamente in un file PHP e successivamente compresso. Il file .zip che ottieni, lo puoi caricare direttamente come un comune plugin. Come puoi vedere il plugin ha molto potenziale, può essere utilizzato anche a seguito di un attacco hacker oppure se vogliamo fare un “cerca e sostituisci” per gli usi più disparati. Da tenere in considerazione che se abbiamo bisogno di questa funzionalità, una sola volta, è possibile procedere anche da SQL intervenendo direttamente nel database.