[wp-trac] [WordPress Trac] #26583: urlencode issue with checkboxes and wp_query
WordPress Trac
noreply at wordpress.org
Thu Dec 12 21:39:11 UTC 2013
#26583: urlencode issue with checkboxes and wp_query
--------------------------+-----------------------------
Reporter: vk011 | Owner:
Type: defect (bug) | Status: new
Priority: normal | Milestone: Awaiting Review
Component: Query | Version: 3.8
Severity: normal | Keywords:
--------------------------+-----------------------------
Hello,
I am making a search that taps into wp_query and filters thru custom
taxonomy terms. It works, but I get a urlencode warning when using
checkboxes to filter thru taxonomy terms assigned to POSTS, but if for
example I have the taxonomy terms assigned to CUSTOM POST TYPE, I DO NOT
get the warning.
The following is my code, to replicate just copy/paste this into a file in
the plugins folder and make custom taxonomies with some terms added to
them (in this particular case they would be location , location2 and
studio).
{{{
<?php
/*
Plugin Name: SS
Plugin URI: http://wordpress.org/plugins/hello-dolly2/
Description: Adds some search filtering
Author: Dzimi
Version: 1.0
Author URI: http://ma.tt/
*/
function vss_form() {
$blog_url = get_bloginfo('url');
?>
<form method="get" action="<?php echo $blog_url; ?>" id="ss-search"
name="vkss-config">
<input type="text" value="<?php echo 'welcome'; ?>" name="s" />
<?php
$taxes = array('location', 'location2', 'studio');
foreach ($taxes as $taxonomy) {
// echo gettype($taxonomy);
$terms = get_terms($taxonomy, array('orderby' => 'id', 'order' =>
'ASC'));
foreach ($terms as $term) {
//
//
$term_name = $term->name;
echo "<p><input type=\"checkbox\" name=\"{$taxonomy}[]\"
value=\"$term_name\" id=\"$term_name\" /><label for=\"$term_name\">
$term_name</label></p>";
}
}
?>
<button>SS Submit</button>
</form>
<?php
}
function vss_search($query) {
// has the form been init?
if (isset($_GET['s'])) {
//make the query
$s = filter_input(INPUT_GET, 's', FILTER_SANITIZE_STRING);
// if ( empty( $s ) ) return;
$query->is_search = true;
$query->set( 's', $s );
$tax_holder = array();
$all_taxes = array('location', 'location2', 'studio');
$tax_names_holder = array();
foreach ($all_taxes as $ind_tax_name) {
if (isset($_GET[$ind_tax_name])) {
$cb_tax_name = $_GET[$ind_tax_name];
$tax_names_holder[$ind_tax_name] = $cb_tax_name;
// echo '<pre>';
// print_r($tax_names_holder);
// echo '</pre>';
}
} // end foreach
foreach ($tax_names_holder as $key => $value) {
if (isset($_GET[$key])) {
$get_tax_term = $_GET[$key];
unset($tax_term);
foreach ($_GET[$key] as $value) {
$tax_term .= ','.$value;
}
$tax_term = ltrim($tax_term, ',');
$new_tax_term = explode(',', $tax_term);
$tax_holder[] = array(
'taxonomy' => $key,
'field' => 'slug',
'operator' => 'AND',
'terms' => $new_tax_term
);
} // end if (isset($_GET[$key])) {
} // end foreach
// end get tax checkbox results
$query->set( 'tax_query', $tax_holder);
// echo '<pre>';
// print_r($tax_holder);
// echo '</pre>';
} // end has the form been init?
} // end vss_search()
add_action('pre_get_posts', 'vss_search');
add_shortcode('vss', 'vss_form');
?>
}}}
To get a detailed error report, I installed Development Debug Backtraces
plugin, and what I get is:
{{{
#0 error_backtrace(2, urlencode() expects parameter 1 to be string, array
given, C:\wamp\www\plugin_tester\wp-includes\formatting.php, 3645, Array
([path] => Array ([0] => bg),[suffix] => ))
#1 urlencode(Array ([0] => bg)) called at [C:\wamp\www\plugin_tester\wp-
includes\formatting.php:3645]
#2 wp_basename(Array ([0] => bg)) called at [C:\wamp\www\plugin_tester
\wp-includes\query.php:1749]
#3 WP_Query->parse_tax_query(Array ([s] => welcome,[location] => Array
([0] => bg),[error] => ,[m] => ,[p] => 0,[post_parent] => ,[subpost] =>
,[subpost_id] => ,[attachment] => ,[attachment_id] => 0,[name] =>
,[static] => ,[pagename] => ,[page_id] => 0,[second] => ,[minute] =>
,[hour] => ,[day] => 0,[monthnum] => 0,[year] => 0,[w] =>
0,[category_name] => ,[tag] => ,[cat] => ,[tag_id] => ,[author] =>
,[author_name] => ,[feed] => ,[tb] => ,[paged] => 0,[comments_popup] =>
,[meta_key] => ,[meta_value] => ,[preview] => ,[sentence] => ,[fields] =>
,[menu_order] => ,[category__in] => Array (),[category__not_in] => Array
(),[category__and] => Array (),[post__in] => Array (),[post__not_in] =>
Array (),[tag__in] => Array (),[tag__not_in] => Array (),[tag__and] =>
Array (),[tag_slug__in] => Array (),[tag_slug__and] => Array
(),[post_parent__in] => Array (),[post_parent__not_in] => Array
(),[author__in] => Array (),[author__not_in] => Array ())) called at
[C:\wamp\www\plugin_tester\wp-includes\query.php:1577]
#4 WP_Query->parse_query() called at [C:\wamp\www\plugin_tester\wp-
includes\query.php:2152]
#5 WP_Query->get_posts() called at [C:\wamp\www\plugin_tester\wp-
includes\query.php:3243]
#6 WP_Query->query(Array ([s] => welcome,[location] => Array ([0] =>
bg))) called at [C:\wamp\www\plugin_tester\wp-includes\class-wp.php:541]
#7 WP->query_posts() called at [C:\wamp\www\plugin_tester\wp-includes
\class-wp.php:605]
#8 WP->main() called at [C:\wamp\www\plugin_tester\wp-
includes\functions.php:808]
#9 wp() called at [C:\wamp\www\plugin_tester\wp-blog-header.php:14]
#10 require(C:\wamp\www\plugin_tester\wp-blog-header.php) called at
[C:\wamp\www\plugin_tester\index.php:17]
}}}
where 'bg' is a term inside location taxonomy.
I repeat, the warning DOES NOT occur with taxonomies attached to CUSTOM
POST TYPES, just the regular POST, which is why I consider it a bug.
Please be so kind as to email me whether or not this is truly a bug and if
it will be looked into or not and if you have additional questions to ask
me feel free to email me or add me on skype: jultranet.
Thanks!
--
Ticket URL: <http://core.trac.wordpress.org/ticket/26583>
WordPress Trac <http://core.trac.wordpress.org/>
WordPress blogging software
More information about the wp-trac
mailing list