WordPress: Filtrare i risultati di Ricerca in base al Post Type

Chiudiamo la settimana con WordPress e con la funzione di ricerca dei post, andiamo a definire insieme un filtro basato sul post_type per i post recuperati.

Il Trigger ‘pre_get_posts’

Iniziamo richiamando la nostra funzione sull’action hook  pre_get_posts, questo hook ci permette di manipolare l’oogetto query contenente i post che stiamo recuperando,  inoltre essendo passato l’oggetto $query come referenza, non è necessario effuttuare una return dei valori nella nostra funziona, viene direttamente manipolato l’oggetto.

Il controllo dei risultati

L’oggetto $query è estremamente versatile e ci permette di controllare liberamente i risultati in base a tantissime condizioni (lascio una lista di possibili applicazioni dopo lo snippet), in questo caso mediante il controllo $query->is_search && !is_admin()  ci assicuriamo che:

  1.  Sia una pagina di ricerca
  2.  Non ci troviamo all’interno dell’amministrazione del sito Web

Fatto questo andiamo a definire le nostre condizioni tramite la funzione set() che modifica i parametri della ricerca, in questo caso vogliamo includere  il custom post type “book” alla normale ricerca di WordPress, e lo facciamo tramite $query->set(‘post_type’, array( ‘post’, ‘book’ ) )

(N.B. abbiamo incluso il tipo “post” all’array per non limitare la ricerca al solo tipo “book” )

 

LO SNIPPET

Ecco lo snippet, pronto per il copia e incolla nel nostro file functions.php del tema corrente  🙂

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* Developer Corsaro.it - Filter Search
* Website: https://developercorsaro.it
* cesare@developercorsaro.it
*/

add_action('pre_get_posts','dcSearchBook');

function dcSearchBook($query) {
if ( !is_admin() && $query->is_search ) {
if ($query->is_search) {
$query->set('post_type', array( 'post', 'book' ) );
}
}
}

POSSIBILI UTILIZZI

Come dicevamo prima utilizzando bene la funzione set() possiamo modificare il flusso dei dati a nostro piacimento, ad esempio possiamo:

  • Limitare la ricerca ai soli articoli:   $query->set(‘post_type’, ‘post’);
  • Limitare il numero dei risultati:  $query->set( ‘posts_per_page’, 10 );
  • Limitare i risulati ad una o più categorie: $query->set( ‘cat’, ‘123, 456, 7’ );

Etc… con un po’ di codice aggiuntivo possiamo davvero stravolgere il tipo ed il numero di post risultati dalla Query di WordPress, sicuramente riprenderemo in mano questa funzione per fare altre cose 🙂

 

Lo hai trovato utile? Codividilo con i tuoi follower :)


Creare un Utente da functions.php

In questo articolo vi mostro uno snippet che mi ha salvato la vita diverse volte, ovvero come creare un utente direttamente dal file functions.php del tema.

Soprattutto nell’ambito del restyle di vecchi siti web capita che i nostri clienti non si ricordino i dati di accesso e che l’unico in loro possesso siano le credenziali dell’hosting, oppure non riusciamo più ad accedere al DB. Lo snippet è molto semplice e fa quello che promette: basta includerlo all’interno del file functions.php del tema attivo per creare un nuovo utente attivo all’interno del sito web. Vediamo come funziona:

Creazione dell’utente

Innanzi tutto impostiamo i 3 parametri fondamentali per definire un nuovo utente: username, password ed e-mail, mentre il ruolo può essere assegnato in un secondo momento. Assegnati questi 3 valori la funzione esegue un controllo affinchè non esista già un utente con quello stesso username e con la stessa mail, per evitare sovrapposizioni.

Infatti se è già presente  lo stesso nome o la stessa mail all’interno dell’anagrafica del sito web, la funzione  wp_create_user()  invece di crearne uno nuovo,restituirà l’oggetto WP_ERROR contenente l’errore  “Sorry, that username already exists!“, optiamo quindi per un nome utente ed una mail non utilizzati.

Assegnazione del ruolo all’utente

Fatto questo resta da stabilire quale ruolo utente vogliamo assegnare, se abbiamo bisogno di recuperare (o meglio resettare) alcuni dati di accesso, ovviamente il tipo di utente che ci serve è un amministratore, impostiamo tramite la funzione  set_role() il ruolo ‘administrator’ .

Action Hook

Infine triggeriamo la funzione tramite add_action(‘init’,’dc_createAccount’) in questo modo WordPress eseguirà la funzione prima di disegnare la pagina del sito web.

Di seguito riportiamo lo snippet, pronto per il copia-incolla 🙂

 

LO SNIPPET

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
* Developer Corsaro.it - Create User from functions.php
* Website: https://developercorsaro.it
* cesare@developercorsaro.it
*/


function dc_createAccount(){
$user_name = 'admin';
$password= 'admin';
$email = 'admin@website.it';

// verifico che l'utente non sia già esistente
if ( !username_exists( $user_name ) && !email_exists( $email ) ) {
$user_id = wp_create_user( $user_name, $password, $email );
$user = new WP_User( $user_id );

// dopo aver creato l'utente assegno il ruolo che voglio,
//in questo caso Administrator
$user->set_role( 'administrator' );
}

}
add_action('init','dc_createAccount');

Ok abbiamo fatto!

Se tutto è andato bene andando nella pagina di login ed inserendo le credenziali, dovremmo poter accedere di nuovo all’amministrazione del sito.

Non dimentichiamoci di togliere il codice da functions.php e di cambiare le credenziali una volta effettuato l’accesso  🙂

Lo hai trovato utile? Codividilo con i tuoi follower :)