• Resolved David Gard

    (@duck_boy)


    Hey all,

    For some reason when I use query_posts the wrong posts are being displayed when I am filtering by a custom taxonomy, called ‘contact’, and i cannot figure out why. Rather than the list of Posts with the contact a Post that has the same name as the contact is being displayed.

    I am using this code –

    $args = Array( // Array of arguments for query_posts()
    	'cat' => $cat,
    	'posts_per_page' => 10,
    	'paged' => $paged,
    	'tag' => get_query_var('tag'),
    	'tla_tag' => get_query_var('tla_tag'),
    	'contact' => get_query_var('contact'));
    query_posts($args);

    Yet the arguments are collecting the correct data –
    Array ( [cat] => 75 [posts_per_page] => 10 [paged] => 0 [tag] => [tla_tag] => [contact] => john-smith )

    Any help would be appriciated.

    Thanks.

Viewing 15 replies - 1 through 15 (of 17 total)
  • quoting scribu here https://core.trac.www.ads-software.com/ticket/9951

    Say you have a ‘genre’ custom taxonomy.

    If it’s hierarchical, these are the query vars that should become available:

    ‘genre’, ‘genre__in’, ‘genre__not_in’, ‘genre__and’

    …in other words, the exact same query vars that are currently available for categories.

    If it’s not hierarchical, these are the query vars that should become available:

    ‘genre’, ‘genre__in’, ‘genre__not_in’, ‘genre__and’, ‘genre_slug__in’, ‘genre_slug__and’

    …in other words, the exact same query vars that are currently available for tags.

    Thread Starter David Gard

    (@duck_boy)

    Michael,

    Thanks for the reply, but not really sure what to do with that.

    The issue is that my other custom taxonomy (tla_tag) is working fine when this method is used, for example – Array ( [cat] => 75 [posts_per_page] => 10 [paged] => 0 [tag] => [tla_tag] => tla-employment [contact] => ) – displays the correct posts, so I suspect that it is becaus I also have a post that is of the same name as that of the term in the contact taxonomy, and it is this that I cannot figure out.

    Thanks.

    What happens if you just query for

    'contact' => get_query_var('contact'));

    Thread Starter David Gard

    (@duck_boy)

    I get the same result.

    Meaning that 'contact' => get_query_var('contact')); is not working?

    Thread Starter David Gard

    (@duck_boy)

    It’s filtering posts but it is displaying a Post with the same name as the contact, rather than all posts that have that contact. E.g it’s giving results for ‘name’ => get_query_var(‘contact’) as opposed to ‘contact’ => get_query_var(‘contact’).

    Live example here – https://www.dynedrewett.com/?contact=hollie-wright
    As you can see, the top of the page reports the correct number of posts usinig get_term_by(), but query_posts() seems to be not quite on the ball.

    Thanks.

    Thread Starter David Gard

    (@duck_boy)

    Quick recap –

    using query_posts('contact' => get_query_var('contact')); (Contact being a custom taxonomy) returns one single post named {contact}, rather than all of the posts with that contact.

    Live example here – https://www.dynedrewett.com/?contact=hollie-wright

    Any help would be appricated.

    How are you registering the taxonomy?

    Also you could have a conflict with rewrite rules if you have both a page with the name contact and a taxonomy with that name ….

    Thread Starter David Gard

    (@duck_boy)

    Hey T310s,

    Sorry for delay in reply, have been away.

    I am registering the taxonomy through functions.php as follows –

    function create_my_taxonomies() {
    	register_taxonomy( 'contact', 'post', array('hierarchical' => false, 'label' => 'Contacts', 'query_var' => true, 'rewrite' => false));
    	register_taxonomy( 'tla_tag', 'post', array('hierarchical' => false, 'label' => 'TLA Tags', 'query_var' => true, 'rewrite' => Array('slug' => 'tla_tag')));
    }
    add_action( 'init', 'create_my_taxonomies', 0 );

    I have also tried 'rewrite' => Array('slug' => 'contact') but unfortunatly that made no difference.

    Seeing as this is causing me a rather large headache, is there any ohter way of displaying the posts that I am after that you know of at all?

    Thanks.

    Looking back, this line looks wrong..

    query_posts('contact' => get_query_var('contact'));

    ..maybe something like..

    query_posts( array( 'contact' => get_query_var('contact') ) );

    or

    query_posts( 'contact='.get_query_var('contact') );

    ..would work..

    Thread Starter David Gard

    (@duck_boy)

    Hey T31os,

    I am using –

    $args = Array( // Array of arguments for query_posts()
    	'cat' => $cat,
    	'posts_per_page' => 10,
    	'paged' => $paged,
    	'tag' => get_query_var('tag'),
    	'tla_tag' => get_query_var('tla_tag'),
    	'contact' => get_query_var('contact'));
    query_posts($args);

    as opposed to just –
    query_posts('contact' => get_query_var('contact'));

    Have tried the other two lines though, just in case, but they both displayed exactly the same. Using the method above the correct posts are displayed for ‘cat’, ‘tag’, and ‘tla_tag’, that is what led me to think it’s because of the post name. I’m not sure how else I can do it though, which is frustrating!

    Thanks.

    What about if you remove the other query vars? Simply as a test to see if there’s a problem calling that query var alongside others..

    I can see you have a page called contact, i can’t imagine that will work alongside a registered query var with the same name.. you’ll end up with two very similar sets of rules in the rewrite array … i’d imagine one rule will win out and work, the other won’t..

    Try changing the page permalink, contact-us, or whatever, something that will make it differ from the query var..

    Thread Starter David Gard

    (@duck_boy)

    Even with just that one it still is problamatic. I take it you have visited the page to see what is going on?

    I’ll try adding another taxonomy with a slightly different name in a minute, but I still think it is because there is a post named the same as the contact (I.e. Hollie Writht). Just had a though – I could call the contacts something like ‘contact-Hollie_Wright’ and put her name in the description and display that.

    Will let you know.

    Thread Starter David Gard

    (@duck_boy)

    Ok, I think I have accidently found the problem, and it is entirely of my own making!

    I run a small function to get an excerpt of the contacts profile if get_query_var('contact') is not empty (but it aslo does other bits) to display above the posts they are the contact for, and when I accidently made that part of the function not the posts displayed correctly. It’s because I’m running query_posts() in here as well isn’t it, so it’s getting rid of my previous options.

    if($typeOf == 'contact'){ // Displays excerpt from the Contacts Profile and a link to the full Profile
    	if($term->name != ''){
    		$contactDetails = query_posts(array('name' => $term->slug));
    		foreach($contactDetails as $contactDetail) {
    			$post_content = explode('.', strip_tags($contactDetail->post_content));
    			echo '<p>' . $post_content[0] . '. <a href="https://www.dynedrewett.com/' . $contactDetail->post_name . '">View full Profile</a></p>';
    		}
    	}
    }

    I’ll look for another way to achieve what I am looking for!

    Thanks for the help.

    It’s because I’m running query_posts() in here as well isn’t it, so it’s getting rid of my previous options.

    Test your theory, remove the code and see if the query vars then behave properly, you can always add it back.. ??

Viewing 15 replies - 1 through 15 (of 17 total)
  • The topic ‘query_posts displaying the wrong posts’ is closed to new replies.