X

Crea modelli di ricerca multipli per tipi di post personalizzati

Snippet di IsItWP

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.

Commenti   Lascia una risposta

  1. Sally Pilkington 7 gennaio 2019 alle 15:09

    Ciao, grazie per questo tutorial.
    Sto cercando di creare un modulo di ricerca personalizzato da inserire nella barra laterale della sezione blog del mio sito web. Voglio che il modulo di ricerca cerchi solo all'interno di POST (post del blog standard, non un tipo di post personalizzato) – e ignori qualsiasi altro contenuto, ad es. pagine. È possibile adattare questo metodo a ciò che sto cercando di fare?
    Ci ho provato ma senza successo.
    Molte grazie

    1. Shahzad Saeed 8 gennaio 2019 alle 7:31

      Ciao Sally,
      Prova questo tutorial su come filtrare i tipi di post dai risultati di ricerca. Spero ti sia utile 🙂

  2. Miao miao miao perfetto )

  3. Pitico Medtler 3 luglio 2015 alle 14:16

    Perfetto. Grazie!

  4. Scusa la domanda da principiante, ma c'è un modo per andare un passo avanti e cercare solo un meta_field personalizzato all'interno del tipo di post personalizzato? Ho cercato per giorni e questo è lo script più vicino che ho trovato. Al momento cerca i titoli e il contenuto del post, ma ho un sacco di campi personalizzati per il CPT e voglio solo che l'utente cerchi un campo specifico. Pensieri?

  5. è possibile adattare queste istruzioni per cercare una tassonomia personalizzata invece di un post personalizzato? Sto cercando di ottenere una ricerca separata per ogni tassonomia personalizzata e non ci sto capendo molto. Grazie!

  6. ho avuto alcuni errori di sintassi, elseif senza punto e virgola alla fine, dopo di che tutto ha funzionato bene :)

  7. 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

    1. Penso che la cosa migliore sarebbe usare javascript per richiedere qualcosa nel campo prima che possano cercare.

    2. Penso che la cosa migliore sarebbe usare javascript per richiedere qualcosa nel campo prima che possano cercare.

    3. Penso che la cosa migliore sarebbe usare javascript per richiedere qualcosa nel campo prima che possano cercare.

  8. 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

  9. 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

  10. Articolo salvavita, grazie, stavo lottando per trovare una buona soluzione, questo ha aiutato molto

    1. Nessun problema, felice che abbiamo potuto aiutare!

  11. Brillante. Grazie. SPACCHI!

    1. Nessun problema, felice che ti piaccia lo snippet!

  12. Brillante. Grazie. SPACCHI!

  13. Stavo usando un child-theme. Ho dovuto usare { load_template(get_stylesheet_directory() . ‘/template_one-name.php’); }

  14. Grazie per il suggerimento! Funziona perfettamente…

  15. 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,

    1. 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);
      ?>

  16. Questo mi restituisce una pagina bianca.. Aiuto?

  17. Ben fatto Signore. Ottimo suggerimento.

  18. Grazie mille! Mi hai appena reso la mattinata.

  19. È solo per tipi di post personalizzati?

  20. Il codice funziona bene in 3.4.2, ma ho dovuto cambiare "post_type" in "posttype".

    Grazie mille! :)

  21. Non funziona per me in 3.3.1. La variabile $s probabilmente non riceve alcun valore. Suggerimenti?

    1. 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.

    2. Ho testato le cose e sembra che funzioni bene, hai creato i file del template personalizzato e hai tutto impostato correttamente?

  22. Ricevo un errore del server cercando di implementare questo :(

    1. quale errore stai ricevendo?

  23. 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.

     

  24.  function custom_search_template() {

    $search_refer = $_GET["post_type"];

    load_template(TEMPLATEPATH . ‘/search/search-‘ .$search_refer. ‘.php’);

    }

  25. Ho un problema con la paginazione, quando il risultato della ricerca del tipo di post personalizzato è superiore a 5.

    Qualche consiglio?

    1. Ho provato questo sull'array arg

      ‘bio’,
      ‘posts_per_page’ => 10,
      ‘paged’ => $paged,
      );
      query_posts($args);
      ?>

Aggiungi un commento

Siamo lieti che tu abbia scelto di lasciare un commento. Tieni presente che tutti i commenti sono moderati secondo la nostra normativa sulla privacy e tutti i link sono nofollow. NON utilizzare parole chiave nel campo del nome. Avviamo una conversazione personale e significativa.

Checklist per il lancio di WordPress

La Guida Definitiva per il Lancio di WordPress

Abbiamo raccolto tutti gli elementi essenziali della checklist per il lancio del tuo prossimo sito web WordPress in un comodo ebook.
Sì, Inviami l'eBook Gratuito!