Stai cercando un modo per creare modelli di ricerca multipli per tipi di post personalizzati? Sebbene esista probabilmente un plugin per questo, abbiamo creato un rapido snippet di codice che puoi utilizzare per creare modelli di ricerca multipli per tipi di post personalizzati in WordPress.
Istruzioni:
Modello di ricerca
Crea un nuovo file chiamato search.php e aggiungi il seguente modello di ricerca. Cambia $search_refer= CUSTOM_POST_TYPE con i nomi dei tuoi tipi di post. Dovrai anche cambiare il percorso del modello con il modello corrispondente che desideri visualizzare i risultati.
<?
/* Template Name: Search Results */
$search_refer = $_GET["post_type"];
if ($search_refer == 'CUSTOM_POST_TYPE') { load_template(TEMPLATEPATH . '/template_one-name.php'); }
elseif ($search_refer == 'CUSTOM_POST_TYPE') { load_template(TEMPLATEPATH . '/template_two-name.php'); };
?>
Visualizza i risultati della ricerca
Aggiungi questo query_post appena sopra il loop nei modelli di ricerca che crei. Non dimenticare di cambiare CUSTOM_POST_TYPE per ciascuno dei tuoi modelli.
<?php
$args = array(
'post_type'=> 'CUSTOM_POST_TYPE',
's' => $s,
'paged' => $paged,
);
query_posts($args);
?>
Modulo di ricerca
Aggiungi questo HTML al modello che desideri visualizzare il modulo di ricerca. Dovrai cambiare il nome CUSTOM_POST_TYPE con il tipo di post che desideri cercare. Dovrai creare un nuovo modulo per ogni tipo di post personalizzato o utilizzare un menu a discesa per impostare post_type.
<form id="searchform" action="<?php bloginfo('home'); ?>/" method="get">
<input id="s" maxlength="150" name="s" size="20" type="text" value="" class="txt" />
<input name="post_type" type="hidden" value="CUSTOM_POST_TYPE" />
<input id="searchsubmit" class="btn" type="submit" value="Search" />
</form>
Nota: Se questa è la prima volta che aggiungi snippet di codice in WordPress, consulta la nostra guida su come aggiungere correttamente snippet di codice in WordPress, in modo da non compromettere accidentalmente il tuo sito.
Se ti è piaciuto questo snippet di codice, prendi in considerazione la lettura dei nostri altri articoli sul sito come: 43 migliori temi di fotografia per WordPress e come creare un modulo di contatto in WordPress.
ho avuto alcuni errori di sintassi, elseif senza punto e virgola alla fine, dopo di che tutto ha funzionato bene :)
se il valore di ricerca è vuoto, ad esempio: ?s=&post_type=products restituisce sempre risultati nel template predefinito, indipendentemente dal post_type presente nella stringa di ricerca? c'è una soluzione?
Ad esempio: ?s=+&post_type=products QUESTO FUNZIONERÀ, apre in search-products.php
questo: ?s=&post_type=products NON FUNZIONERÀ, apre in search-post.php
Penso che la cosa migliore sarebbe usare javascript per richiedere qualcosa nel campo prima che possano cercare.
Penso che la cosa migliore sarebbe usare javascript per richiedere qualcosa nel campo prima che possano cercare.
Penso che la cosa migliore sarebbe usare javascript per richiedere qualcosa nel campo prima che possano cercare.
se il valore di ricerca è vuoto, ad esempio: ?s=&post_type=products restituisce sempre risultati nel template predefinito, indipendentemente dal post_type presente nella stringa di ricerca? c'è una soluzione?
Ad esempio: ?s=+&post_type=products QUESTO FUNZIONERÀ, apre in search-products.php
questo: ?s=&post_type=products NON FUNZIONERÀ, apre in search-post.php
se il valore di ricerca è vuoto, ad esempio: ?s=&post_type=products restituisce sempre risultati nel template predefinito, indipendentemente dal post_type presente nella stringa di ricerca? c'è una soluzione?
Ad esempio: ?s=+&post_type=products QUESTO FUNZIONERÀ, apre in search-products.php
questo: ?s=&post_type=products NON FUNZIONERÀ, apre in search-post.php
Articolo salvavita, grazie, stavo lottando per trovare una buona soluzione, questo ha aiutato molto
Nessun problema, felice che abbiamo potuto aiutare!
Brillante. Grazie. SPACCHI!
Nessun problema, felice che ti piaccia lo snippet!
Brillante. Grazie. SPACCHI!
Stavo usando un child-theme. Ho dovuto usare { load_template(get_stylesheet_directory() . ‘/template_one-name.php’); }
Grazie per il suggerimento! Funziona perfettamente…
Adoro l'idea dietro questo, così intelligente.
Ho un problema con la paginazione però. Quindi lo rende in qualche modo inutile a meno che non visualizzi tutti i risultati con un 'showposts'=>999,
OH SANTO CIELO… stavo lavorando a questo da circa un'ora prima di arrendermi e commentare… e poi ho capito…
Ho cambiato l'argomento di query_posts in questo
‘bio’,
‘posts_per_page’ => 10,
‘paged’ => $paged,
);
query_posts($args);
?>
Questo mi restituisce una pagina bianca.. Aiuto?
Ben fatto Signore. Ottimo suggerimento.
Grazie mille! Mi hai appena reso la mattinata.
È solo per tipi di post personalizzati?
Il codice funziona bene in 3.4.2, ma ho dovuto cambiare "post_type" in "posttype".
Grazie mille! :)
Non funziona per me in 3.3.1. La variabile $s probabilmente non riceve alcun valore. Suggerimenti?
Testerò le cose in una versione recente di wordpress per assicurarmi, anche se non dovresti avere problemi. Suggerirei anche di aggiornare alla 3.4. Posterò qui i risultati.
Ho testato le cose e sembra che funzioni bene, hai creato i file del template personalizzato e hai tutto impostato correttamente?
Ricevo un errore del server cercando di implementare questo :(
quale errore stai ricevendo?
ok, ecco cosa ho fatto come soluzione alternativa:
1. ho creato una cartella all'interno dei miei file di template chiamata "search". -> TEMPLATEPATH.'/search/'
2. quindi creato modelli di post personalizzati utilizzando il codice di Wordpress search.php predefinito.
es. : search-xxxxx.php dove xxxxx è il tipo di post personalizzato.
3. posizionare tutti i modelli di post personalizzati search-xxxxx.php nella cartella search appena creata.
4. rinominare il search.php predefinito di Wordpress in -> default-search.php
5. creare un nuovo search.php e inserire il seguente codice:
6. stiamo essenzialmente chiamando una funzione chiamata custom_search_template().
7. definiamo quella funzione nel file fuctions.php:
function custom_search_template() {
$search_refer = $_GET["post_type"];
if ( isset($_GET["post_type"]))
{
if (file_exists(TEMPLATEPATH . ‘/search/search-‘ .$search_refer. ‘.php’))
load_template(TEMPLATEPATH . ‘/search/search-‘ .$search_refer. ‘.php’);
else
{
load_template(TEMPLATEPATH . ‘/search-default.php’);
}
}
else
{
load_template(TEMPLATEPATH . ‘/search-default.php’);
}
8. Infine il modulo di ricerca:
Seleziona Tipo Post
Business
News
ETICHETTA
9. Fondamentalmente, quando si utilizza questo modulo per inviare una query di ricerca,
Wordpress ottiene name=”post_type” -> cioè: $_GET["post_type"];
La funzione controlla quindi se $_GET["post_type"] è stato impostato,
in tal caso carica un file modello basato su $search_refer = $_GET["post_type"]
dalla cartella /search/ che abbiamo creato. Cioè search-xxxxx.php -> search-$search_refer.php
se non esiste un modello chiamato “search-$search_refer.php”, la funzione utilizza default-search.php per visualizzare i risultati della ricerca.
10. Per favore commenta se sbaglio.
function custom_search_template() {
$search_refer = $_GET["post_type"];
load_template(TEMPLATEPATH . ‘/search/search-‘ .$search_refer. ‘.php’);
}
Ho un problema con la paginazione, quando il risultato della ricerca del tipo di post personalizzato è superiore a 5.
Qualche consiglio?
Ho provato questo sull'array arg
‘bio’,
‘posts_per_page’ => 10,
‘paged’ => $paged,
);
query_posts($args);
?>
Come si imposta qualcosa in modo che appaia il messaggio “nessun risultato” se non ci sono record nel db?
Oh, fantastico! E per quanto riguarda i campi modulo basati su tassonomie o campi personalizzati, come per un campo di ricerca immobiliare? Leggendo lo snippet, sembra una normale casella di ricerca a testo libero che cerca il tipo di post della pagina che stai visualizzando. E se fosse una casella di ricerca nella homepage o in un altro non-CPT? Non sembra esserci un fallback a una normale ricerca di WordPress. Si prega di correggere se sbaglio.
No no amico mio, sembri un po' confuso
Controlla questa riga:
Potresti cambiarlo in un selettore di post personalizzato:
Business
News LABEL
e così via..
Nota che:
name=”post_type” —-> $_GET[“post_type”]; —> = $search_refer. il che significa che la ricerca non si basa sul tipo di post della pagina che stai visualizzando. Si basa su: name=”post_type” valore.
Funziona benissimo! Grazie mille!
Questo funziona (brillantemente! grazie Kevin) l'unico problema è che c'è una } fuori posto nella sezione
Visualizza i risultati della ricerca. Questo potrebbe essere la causa del problema di Lin D.
@toomanyairmiles:disqus sono lieto di sapere che ti piace lo snippet e grazie per l'avviso per quella } extra, ho aggiornato lo snippet.
Questo non ha funzionato sul mio
Ciao Lin D. questo funziona, lo sto usando con diversi clienti. Se volessi inviarmi un'email con il modulo qui sotto posso aiutarti ulteriormente via email per far funzionare le cose e anche dare un'occhiata ai tuoi template se vuoi.
http://wpsnipp.com/contact/