[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