• I’ve set up an ACF to retrieve an array of selected categories with which then I query posts to display a list of the latest 5 entries.

    Field Name: categoria
    Field Type: Taxonomy
    Taxonomy: Categories
    Required: No
    Field Type: Multiple Values > Checkbox
    Allow Null: No
    Load value based on the post’s terms and update the post’s terms on save: Off
    Return Value: Term ID

    The code I’m using to do the query is as following:

    <?php $cat = get_field('categoria'); $args = array( 'numberposts' => 5, 'category' => $cat); $postslist = get_posts($args);
    	foreach ($postslist as $post) :  setup_postdata($post); ?>
    		<div>
    			<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
    			<span><?php the_time('d/m/y');  ?> | <?php the_category(', ') ?>  </span>
    		</div>
    	<?php endforeach; ?>

    It works “fine” if there are no categories selected, but if one or more categories are selected then the following error shows up:

    Warning: urldecode() expects parameter 1 to be string, array given in …/wp-includes/query.php on line 1735

    Line 1735 is: $q['cat'] = ''.urldecode($q['cat']).'';

    … inside this if conditional:

    // Category stuff
    if ( !empty($q['cat']) && '0' != $q['cat'] && !$this->is_singular && $this->query_vars_changed ) {
    	$q['cat'] = ''.urldecode($q['cat']).'';
    	$q['cat'] = addslashes_gpc($q['cat']);
    	$cat_array = preg_split('/[,\s]+/', $q['cat']);
    	$q['cat'] = '';
    	$req_cats = array();
    	foreach ( (array) $cat_array as $cat ) {
    	$cat = intval($cat);
    	$req_cats[] = $cat;
    	$in = ($cat > 0);
    	$cat = abs($cat);
    	if ( $in ) {
    	$q['category__in'][] = $cat;
    	$q['category__in'] = array_merge( $q['category__in'], get_term_children($cat, 'category') );
    } else {
    	$q['category__not_in'][] = $cat;
    	$q['category__not_in'] = array_merge( $q['category__not_in'], get_term_children($cat, 'category') );
    	}
    }
    $q['cat'] = implode(',', $req_cats);
    }

    Any help would very much appreciated!

    https://www.ads-software.com/extend/plugins/advanced-custom-fields/

Viewing 3 replies - 1 through 3 (of 3 total)
  • Same problem here
    Works perfecto on local environment but fails on server using
    $special_offers_args = array(
    ‘posts_per_page’ => (int) get_option(’boutique_special_offers_numposts’),
    ‘cat’ => array(6,7,8,9),
    ‘orderby’ => ‘rand’,
    ‘exclude’ => ’10’,
    );

    Any help?

    ‘cat’ not array is string.

    $cats=wp_get_post_categories(get_the_ID());
    
    if(count($cats)>1){
       foreach($cats as $cat){
    	$strcats=$cat.",";
       }
    } else {
       $strcats=$cats[0];
    }
    
    $args = array("widget_title" => "",					"thumbnail_width" => "92",					"thumbnail_height" => "92",					"category_include" => $strcats,
    "vf_allposts" => "yes",
    "vf_everything" => "no");

    i had same problem too passing at ‘cat’ array or integer.
    I solved passing string.
    Them could switch it to an array ;D

Viewing 3 replies - 1 through 3 (of 3 total)
  • The topic ‘Warning: urldecode() when using Taxonomy field type’ is closed to new replies.