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