web-dev-qa-db-fra.com

Création d'un formulaire de recherche personnalisé

Je crée un formulaire de recherche personnalisé qui recherchera un type d'article personnalisé appelé recettes. et il a une charge de taxonomies.

Maintenant, je sortie les termes de ces taxonomies dans des cases à cocher qui sont regroupées par nom de taxonomie.

La question est sur l'entrée:

<!-- language: lang-html -->

  <label><input type="checkbox" name="epx_recipes_season[]" value="autumn">Autumn</label>
  <label><input type="checkbox" name="epx_recipes_season[]" value="spring">Spring</label>
  <label><input type="checkbox" name="epx_recipes_season[]" value="summer-3">Summer</label>
  <label><input type="checkbox" name="epx_recipes_season[]" value="winter-3">Winter</label>

  <label><input type="checkbox" name="epx_recipes_course[]" value="breakfast-3">Breakfast</label>
  <label><input type="checkbox" name="epx_recipes_course[]" value="brunch-2">Brunch</label>
  <label><input type="checkbox" name="epx_recipes_course[]" value="dessert">Dessert</label>
  <label><input type="checkbox" name="epx_recipes_course[]" value="dinner">Dinner</label>
  <label><input type="checkbox" name="epx_recipes_course[]" value="light-meals-2">Light Meals</label>
  <label><input type="checkbox" name="epx_recipes_course[]" value="lunch-3">Lunch</label>

  <label><input type="checkbox" name="epx_recipes_requirements[]" value="diary-free">Diary free</label>
  <label><input type="checkbox" name="epx_recipes_requirements[]" value="Egg-free">Egg Free</label>
  <label><input type="checkbox" name="epx_recipes_requirements[]" value="gluten-free-3">Gluten Free</label>
  <label><input type="checkbox" name="epx_recipes_requirements[]" value="nut-free">Nut Free</label>
  <label><input type="checkbox" name="epx_recipes_requirements[]" value="shellfish-free">Shellfish free</label>
  <label><input type="checkbox" name="epx_recipes_requirements[]" value="vegitarians">vegitarians</label>

  <label><input type="checkbox" name="epx_recipes_cuisines[]" value="american">American</label>
  <label><input type="checkbox" name="epx_recipes_cuisines[]" value="british-3">British</label>
  <label><input type="checkbox" name="epx_recipes_cuisines[]" value="greek-3">Greek</label>
  <label><input type="checkbox" name="epx_recipes_cuisines[]" value="irish">Irish</label>
  <label><input type="checkbox" name="epx_recipes_cuisines[]" value="italian">Italian</label>
  <label><input type="checkbox" name="epx_recipes_cuisines[]" value="mexican-3">Mexican</label>
  <label><input type="checkbox" name="epx_recipes_occastions[]" value="birthdays">Birthdays</label>
  <label><input type="checkbox" name="epx_recipes_occastions[]" value="christmas">Christmas</label>
  <label><input type="checkbox" name="epx_recipes_occastions[]" value="easter-3">Easter</label>
  <label><input type="checkbox" name="epx_recipes_occastions[]" value="fathers-day-2">Fathers Day</label>
  <label><input type="checkbox" name="epx_recipes_occastions[]" value="mothers-day-2">Mothers day</label>
  <label><input type="checkbox" name="epx_recipes_occastions[]" value="valentines">Valentines</label>

Le problème vient du nom qu'ils doivent garder groupés ensemble, ils ont un [] alors quand ils sont postés ça va comme un tableau que je peux ensuite analyser. WordPress lit immédiatement le formulaire et génère le message d'erreur suivant.

Avis: Conversion de chaîne en chaîne dans /home/sites/epixdev1.co.uk/public_html/htk2014/wp-includes/query.php à la ligne 1858

Attention: preg_split () s'attend à ce que le paramètre 2 soit une chaîne, tableau donné dans /home/sites/epixdev1.co.uk/public_html/htk2014/wp-includes/query.php à la ligne 1867

Avis: Conversion de chaîne en chaîne dans /home/sites/epixdev1.co.uk/public_html/htk2014/wp-includes/query.php à la ligne 1858

Attention: preg_split () s'attend à ce que le paramètre 2 soit une chaîne, tableau donné dans /home/sites/epixdev1.co.uk/public_html/htk2014/wp-includes/query.php à la ligne 1867

Avis: Essayer d'obtenir la propriété de non-objet dans /home/sites/epixdev1.co.uk/public_html/htk2014/wp-content/plugins/wordpress-seo/frontend/class-opengraph.php à la ligne 524

Voici le code qui fait la forme

<!-- language: lang-php -->

//Will be used to output the advanced search box
function epix_recipes_search(){
    //Need to run each different type of taxonmies
    //How Many there are
    $noTax = 6;

    //The Taxonomies
    $taxonomies = array('epx_recipes_season','epx_recipes_course','epx_recipes_requirements','epx_recipes_cuisines','epx_recipes_occastions','epx_recipes_typeofcooking');

    //need the basic output varible 
    $output = "";

    //Need to build a basic form
    $output .= '<form method="post" id="searchform" action="/recipes/">'."\r\n";
    //Now a Basic Search box
    $output .= '    <h2>Keyword Search</h2>'."\r\n";
    $output .= '    <input type="text" class="field" name="s" id="s" size="19" placeholder="Search" />'."\r\n";

    //Now need to Show the Advance Search Area
    $output .= '    <h2>Advanced Filters</h2>'."\r\n";
    //Now need to run the system for each Taxonomies
    foreach ( $taxonomies as $tax ) {
        //Need to get the name of each TAX
        //What Taxonomy we want to check
        $args=array(
          'name' => $tax
        );
        $outputtype = 'objects'; // or objects
        $taxonomieslist=get_taxonomies($args,$outputtype); 
        if  ($taxonomieslist) {
            foreach ($taxonomieslist as $taxonomiesone ) {
              $output .= '  <h3>'. $taxonomiesone->labels->name. '</h3>'."\r\n";
            }
        }

        //now get the terms in the Taxonomies
        $output .= epix_recipes_taxterms($tax);
    }

    //now need to end the form with the correct sytack

    //First a submit button
    $output .= '    <input type="submit" class="submit" name="submit" id="searchsubmit" value="submit" />'."\r\n";
    //Now the closing for tag
    $output .= '</form'."\r\n";

    //Need to return the form
    return $output;
   }

  //This will get the taxonomies terms
  function epix_recipes_taxterms($tax){

    //Need to get each term and return it
    $returnoutput = "";
    $terms = get_terms($tax,'hide_empty=0');
    if ( !empty( $terms ) && !is_wp_error( $terms ) ){
        //$returnoutput .= "  <select name=".$tax.">"."\r\n";
        $i = 0;
        foreach ( $terms as $term ) {
            $returnoutput .= '      <label><input type="checkbox" name="'.$tax.'[]" value="'.$term->slug.'">' . $term->name . '</label>'."\r\n";
            //$i++;['.$i.']
        }
        //$returnoutput .= "  </select>"."\r\n";
    }
    return $returnoutput;
   }

Si quelqu'un peut m'aider à comprendre pourquoi cela se produit ou à empêcher WordPress de divulguer ces erreurs, ce serait vraiment utile.

Oui, j'ai le débogage WordPress!

1
Ryan Bowden

Voici une option.
Donnez un nom plus précis, par exemple custom_search_form à votre bouton d'envoi:

(...)
//First a submit button
$output .= '<input type="submit" class="submit" name="custom_search_form" id="searchsubmit" value="submit" />'."\r\n";

Ensuite, vous pouvez ajouter ceci à votre fichier functions.php:

add_action( 'parse_request', 'my_custom_search_form' );
function my_custom_search_form($query) {
  //return if it not our custom search form
  if ( ! isset( $query->query_vars[ 'custom_search_form' ] ) )
    return $query;

  //handle form here
}

De plus, n'oubliez pas de définir la valeur query_var sur true lors de l'enregistrement de votre taxonomie:

'query_var'         => true,
1
Diogo Gomes

Quelques notes. Ils ne résoudront peut-être pas tous vos problèmes, mais ils pourraient vous aider.

Dans epix_recipes_search(), vous utilisez get_taxonomies() comme si c'était get_taxonomy() dans votre boucle foreach.

Vous pouvez remplacer tout cela:

$args=array(
    'name' => $tax
);
$outputtype = 'objects'; // or objects
$taxonomieslist=get_taxonomies($args,$outputtype);

avec ça:

$taxonomieslist = get_taxonomy( $tax )

Le $taxonomieslist est un peu impropre dans la mesure où il ne contient qu'un seul objet taxonomie (je le renommerais en conséquence, peut-être $tax_object). Par conséquent, vous pouvez également supprimer tout cela:

if ($taxonomieslist) {
    foreach ($taxonomieslist as $taxonomiesone ) {
        $output .= '  <h3>'. $taxonomiesone->labels->name. '</h3>'."\r\n";
    }
}

Et remplacez-le par ceci:

$output .= '  <h3>'. $taxonomieslist->labels->name. '</h3>'."\r\n";

Il semble également que vous manquiez d'un ">" de fermeture sur votre balise </form>.

0
mrwweb