[wp-hackers] wp-hackers Digest, Vol 66, Issue 101

Mike Schinkel mikeschinkel at newclarity.net
Mon Jul 26 21:26:10 UTC 2010


Oops, I meant to include this link to a standalone file that you can download to your website root to demonstrate this with your own post_type and taxonomy:

http://gist.github.com/491202

-Mike

On Jul 26, 2010, at 4:56 PM, Mike Schinkel wrote:

> Hi Kris:
> 
> I was intrigued to find a solution for "taxonomy=clients" and "term=any" where "any" is a wildcard (WP_Query() supports "any" as a wildcard for post_types but not for terms of a taxonomy.)
> 
> Here's a hook that adds an "any" wildcard for terms for a taxonomy assuming some other plugin didn't muck with the " AND 0 " inserted into the WHERE clause when a taxonomy term doesn't match:
> 
> add_action('posts_where','my_posts_where',10,2);
> 
> function my_posts_where($where,$query) {
> 	if (isset($query->query_vars['taxonomy']) && $query->query_vars['term']=='any') {
> 		global $wpdb;
> 		$tt = $wpdb->term_taxonomy;
> 		$tr = $wpdb->term_relationships;
> 		$where .= $wpdb->prepare(" AND {$wpdb->posts}.ID IN (
> 						SELECT object_id FROM $tr
> 						INNER JOIN $tt ON $tt.term_taxonomy_id = $tr.term_taxonomy_id
> 						WHERE $tt.taxonomy=%s) ",$query->query_vars['taxonomy']);
> 		$where = str_replace(' AND 0 ','',$where);
> 	}
> 	return $where;
> }
> 
> Your query for this would look like this:
> 
> $posts = new WP_Query("post_type=portfolio_item&taxonomy=clients&term=any&posts_per_page=-1");
> 
> Or like this:
> 
> $posts = new WP_Query(array(
> 	'post_type' => 'portfolio_item',
> 	'taxonomy' => 'clients',
> 	'term' => 'any',
> 	'posts_per_page' => -1,
> ));
> 
> It works but unfortunately it's not very robust because of the need to remove the " AND 0 " from the WHERE clause because there are other reasons get_posts() adds " AND 0 ".  If query natively supported "term=any" or at least if there was a hook in /wp-includes/query.php (lines 2049 and 2068) that allowed us to target this specifically it might be better; if any of the core team agree I'll add a ticket to trac.
> 
> Alternate, maybe someone else knows a better way I didn't discover?
> 
> -Mike
> 
> 
> On Jul 26, 2010, at 10:53 AM, Kris Young wrote:
> 
>> I was as nice as I could be in my original mail without getting
>> frustrated - it really helps though that someone else is having the same
>> problem though. I honestly think this whole process was a lot more
>> complicated than it should have been.
>> 
>> Thanks for your solution - I will do my best to take a look at it today,
>> and will let you know when I make some progress. Thanks again, and also
>> to Mike Schinkel for the same.
>> 
>> Kris
>> 
>> -----Original Message-----
>> From: wp-hackers-bounces at lists.automattic.com
>> [mailto:wp-hackers-bounces at lists.automattic.com] On Behalf Of Jared
>> Williams
>> Sent: 26 July 2010 14:23
>> To: wp-hackers at lists.automattic.com
>> Subject: Re: [wp-hackers] wp-hackers Digest, Vol 66, Issue 101
>> 
>> I have a wp_nav_menu, and it has two top level pages that have a bunch
>> of
>> terms I've created for two custom taxonomies, which are for the two top
>> level pages. I'm trying to figure out how I can hide the terms from the
>> drop
>> down menu I made that shows the terms, if there are no posts assigned to
>> a
>> term of the taxonomies. Is this possible? It doesn't seem like it is.
>> 
>> 
>> As for Kris Young's question about showing all posts of a taxonomy, this
>> is
>> a problem I ran into as well, and searched for a long time and found it
>> very
>> hard to figure out.
>> 
>> What I managed to do is list all terms for a taxonomy, and all the posts
>> for
>> each term individually. You may be able to hack this to do what you're
>> trying to do since it is the same as what I needed to do I just didn't
>> have
>> time to make it list only the posts for the taxonomy.
>> 
>> 
>> <?php
>> // Create list of taxonomy terms and list the posts under each term
>> $post_type = 'post';
>> $tax = 'your_custom_taxonomy';
>> $tax_terms = get_terms( $tax );
>> if ($tax_terms) {
>>   foreach ($tax_terms  as $tax_term) {
>>   $args = array(
>>       'post_type' => $post_type,
>>       "tax" => $tax_term->slug,
>>       'post_status' => 'publish',
>>       'posts_per_page' => -1,
>>       'caller_get_posts'=> 1
>>   );
>> 
>>       $my_query = null;
>>       $my_query = new WP_Query($args);
>> 
>>       if( $my_query->have_posts() ) : ?>
>> 
>>           <h2 class="breadcrumb">All <?php echo $tax; ?> Posts For
>> <?php
>> echo $tax_term->name; ?></h2>
>>           <ul class="taxlist">
>>           <?php while ( $my_query->have_posts() ) :
>> $my_query->the_post();
>> ?>
>> 
>>               <li id="post-<?php the_ID(); ?>">
>>                   <a href="<?php the_permalink(); ?>" rel="bookmark"
>> title="Permanent Link to <?php the_title_attribute(); ?>"><?php
>> the_title();
>> ?></a>
>>               </li>
>> 
>> 
>>           <?php endwhile; // end of loop ?>
>>           </ul>
>> 
>>           <?php if( function_exists('wp_pagenavi')) { wp_pagenavi(); }
>> else { ?>
>>               <div class="navigation clearfix">
>>                   <div class="alignleft"><?php
>> next_posts_link('&laquo;
>> Previous Entries') ?></div>
>>                   <div class="alignright"><?php
>> previous_posts_link('Next
>> Entries &raquo;') ?></div>
>>               </div>
>>           <?php } ?>
>> 
>>       <?php else : ?>
>> 
>>           <h2 class="title">Oops</h2>
>>           <p>Looks like something is missing...</p>
>> 
>>       <?php endif; // if have_posts()
>>       wp_reset_query();
>> 
>>   } // end foreach #tax_terms
>> }
>> ?>
>> 
>> Hope this helps.
>> 
>> Jared Williams
>> 
>> 
>> On Mon, Jul 26, 2010 at 8:00 AM,
>> <wp-hackers-request at lists.automattic.com>wrote:
>> 
>>> Send wp-hackers mailing list submissions to
>>>      wp-hackers at lists.automattic.com
>>> 
>>> To subscribe or unsubscribe via the World Wide Web, visit
>>>      http://lists.automattic.com/mailman/listinfo/wp-hackers
>>> or, via email, send a message with subject or body 'help' to
>>>      wp-hackers-request at lists.automattic.com
>>> 
>>> You can reach the person managing the list at
>>>      wp-hackers-owner at lists.automattic.com
>>> 
>>> When replying, please edit your Subject line so it is more specific
>>> than "Re: Contents of wp-hackers digest..."
>>> 
>>> 
>>> Today's Topics:
>>> 
>>> 1. Re: Custom post types - a multitude of problems (Mike Schinkel)
>>> 2. Querying posts of another WordPress install (Ashish Saini)
>>> 3. Re: Querying posts of another WordPress install (Ashish Saini)
>>> 4. Re: Querying posts of another WordPress install (Aaron Jorbin)
>>> 
>>> 
>>> ----------------------------------------------------------------------
>>> 
>>> Message: 1
>>> Date: Mon, 26 Jul 2010 06:06:14 -0400
>>> From: Mike Schinkel <mikeschinkel at newclarity.net>
>>> Subject: Re: [wp-hackers] Custom post types - a multitude of problems
>>> To: wp-hackers at lists.automattic.com
>>> Message-ID: <F70451A1-2EFF-4911-BD5C-ACC86CF452E7 at newclarity.net>
>>> Content-Type: text/plain;       charset=us-ascii
>>> 
>>> On Jul 26, 2010, at 5:20 AM, Kris Young wrote:
>>>> I need to output the contents (all posts, all content of those
>> posts) of
>>>> a specific custom category (taxonomy) and I have no idea how to get
>> it
>>>> done. All I want is a page that outputs all the posts for a certain
>>>> category (and that category only) that I created using this code:
>>>> 
>>>> register_taxonomy("clients", array("portfolio_item"),
>>>> array("hierarchical" => true, "label" => "Clients", "singular_label"
>> =>
>>>> "Client", "rewrite" => array('slug'=>'portfolio_item')));
>>>> 
>>>> Yes, that part was simple, but for some reason my custom taxonomy is
>>>> completely separate from the rest of the site and irretrievable.
>> Can't
>>>> figure out for the life of me how to do this.
>>> 
>>> To start, I think you have your taxonomy registration wrong. (FWIW my
>>> preference would be to go with a singular for the taxonomy name, e.g.
>>> "client" but I'll leave yours as is):
>>> 
>>> $labels = array(
>>>  'name' => _x( 'Clients', 'taxonomy general name' ),
>>>  'singular_name' => _x( 'Client', 'taxonomy singular name' ),
>>>  'search_items' =>  __( 'Search Clients' ),
>>>  'all_items' => __( 'All Clients' ),
>>>  'parent_item' => __( 'Parent Client' ),
>>>  'parent_item_colon' => __( 'Parent Client:' ),
>>>  'edit_item' => __( 'Edit Client' ),
>>>  'update_item' => __( 'Update Client' ),
>>>  'add_new_item' => __( 'Add New Client' ),
>>>  'new_item_name' => __( 'New Client Name' ),
>>> );
>>> 
>>> register_taxonomy("clients", array("portfolio_item"),array(
>>>      "hierarchical" => true,
>>>      "labels" => $labels,
>>>      "public" => true,
>>>      "show_ui" => true,
>>>      "query_var" => "clients",
>>>      "rewrite" => array('slug'=>'client'),
>>> ));
>>> 
>>> Many of these options will default but I went ahead and listed them
>> all.
>>> Read more here:
>>> 
>>> http://codex.wordpress.org/Function_Reference/register_taxonomy
>>> 
>>> As for the rest of your question, I'm unclear.  Do you want all
>> Portfolio
>>> Items that have *any* clients, or a specific client?  For a specific
>> client
>>> i.e. "john-smith" I think this would be what you need (though I
>> haven't run
>>> the code so it may have typos):
>>> 
>>> <?php
>>> $portfolio_items = new
>>> 
>> WP_Query('post_type=portfolio_item&taxonomy=clients&term=john-smith&post
>> s_per_page=-1');
>>> if ( $portfolio_items->have_posts() ):
>>>      while ( $portfolio_items->have_posts() ) :
>>> $portfolio_items->the_post(); ?>
>>>              <h2 id="post-<?php the_ID(); ?>" <?php post_class();
>>> ?>><?php the_title(); ?></h2>
>>>              <?php the_content();
>>>      endwhile;
>>> endif;
>>> 
>>> If you want to get all portfolio items that have *any* clients I've
>>> actually not done that before so I'll have to let someone else answer.
>>> 
>>> HTH.
>>> 
>>> -Mike
>>> 
>>> ------------------------------
>>> 
>>> Message: 2
>>> Date: Mon, 26 Jul 2010 17:08:30 +0530
>>> From: Ashish Saini <ashishsainiashfame at gmail.com>
>>> Subject: [wp-hackers] Querying posts of another WordPress install
>>> To: wp-hackers <wp-hackers at lists.automattic.com>
>>> Message-ID:
>>>      <AANLkTi=CHq9bUukSa19MgJVSUU1CuQYfzUj6RBvmy3NS at mail.gmail.com>
>>> Content-Type: text/plain; charset=ISO-8859-1
>>> 
>>> Hi,
>>> 
>>> Is there any way that I can query posts from another WordPress install
>>> residing in the same database? I know it can be done via SQL queries
>> but is
>>> there any workaround hacking my way along with API?
>>> 
>>> Thanks & Regards
>>> Ashish Saini aka Ashfame
>>> (Deserve Before You Desire)
>>> Homepage : http://www.ashfame.com | Blog : http://blog.ashfame.com |
>>> Twitter
>>> : http://twitter.com/ashfame
>>> 
>>> 
>>> ------------------------------
>>> 
>>> Message: 3
>>> Date: Mon, 26 Jul 2010 17:12:22 +0530
>>> From: Ashish Saini <ashishsainiashfame at gmail.com>
>>> Subject: Re: [wp-hackers] Querying posts of another WordPress install
>>> To: wp-hackers <wp-hackers at lists.automattic.com>
>>> Message-ID:
>>>      <AANLkTimmte-eFUkmk2w3KsaZpWkHCKtD=pxU4OnPj0XA at mail.gmail.com>
>>> Content-Type: text/plain; charset=ISO-8859-1
>>> 
>>> I think this can be done with the help of setup_postdata() by
>> populating
>>> the
>>> fields as explained here -
>>> 
>> http://codex.wordpress.org/Displaying_Posts_Using_a_Custom_Select_Query
>>> 
>>> Right? And is this the best approach?
>>> 
>>> Thanks & Regards
>>> Ashish Saini aka Ashfame
>>> (Deserve Before You Desire)
>>> Homepage : http://www.ashfame.com | Blog : http://blog.ashfame.com |
>>> Twitter
>>> : http://twitter.com/ashfame
>>> 
>>> 
>>> On Mon, Jul 26, 2010 at 5:08 PM, Ashish Saini
>>> <ashishsainiashfame at gmail.com>wrote:
>>> 
>>>> Hi,
>>>> 
>>>> Is there any way that I can query posts from another WordPress
>> install
>>>> residing in the same database? I know it can be done via SQL queries
>> but
>>> is
>>>> there any workaround hacking my way along with API?
>>>> 
>>>> Thanks & Regards
>>>> Ashish Saini aka Ashfame
>>>> (Deserve Before You Desire)
>>>> Homepage : http://www.ashfame.com | Blog : http://blog.ashfame.com |
>>>> Twitter : http://twitter.com/ashfame
>>>> 
>>> 
>>> 
>>> ------------------------------
>>> 
>>> Message: 4
>>> Date: Mon, 26 Jul 2010 07:56:17 -0400
>>> From: Aaron Jorbin <aaron at jorb.in>
>>> Subject: Re: [wp-hackers] Querying posts of another WordPress install
>>> To: wp-hackers at lists.automattic.com
>>> Message-ID:
>>>      <AANLkTin6x+4NT6E6bxR=1Xq43D6txPhT0et2xnK_45Nt at mail.gmail.com>
>>> Content-Type: text/plain; charset=ISO-8859-1
>>> 
>>> Is this using Multisite?  If so, you can use switch_to_blog -
>>> http://codex.wordpress.org/WPMU_Functions/switch_to_blog and it's
>>> counterpart restore_current_blog -
>>> http://codex.wordpress.org/WPMU_Functions/restore_current_blog to move
>>> around use the api.
>>> 
>>> 
>>> 
>>> http://aaron.jorb.in
>>> twitter: twitter.com/aaronjorbin
>>> 
>>> 
>>> On Mon, Jul 26, 2010 at 7:42 AM, Ashish Saini
>>> <ashishsainiashfame at gmail.com>wrote:
>>> 
>>>> I think this can be done with the help of setup_postdata() by
>> populating
>>>> the
>>>> fields as explained here -
>>>> 
>> http://codex.wordpress.org/Displaying_Posts_Using_a_Custom_Select_Query
>>>> 
>>>> Right? And is this the best approach?
>>>> 
>>>> Thanks & Regards
>>>> Ashish Saini aka Ashfame
>>>> (Deserve Before You Desire)
>>>> Homepage : http://www.ashfame.com | Blog : http://blog.ashfame.com |
>>>> Twitter
>>>> : http://twitter.com/ashfame
>>>> 
>>>> 
>>>> On Mon, Jul 26, 2010 at 5:08 PM, Ashish Saini
>>>> <ashishsainiashfame at gmail.com>wrote:
>>>> 
>>>>> Hi,
>>>>> 
>>>>> Is there any way that I can query posts from another WordPress
>> install
>>>>> residing in the same database? I know it can be done via SQL
>> queries
>>> but
>>>> is
>>>>> there any workaround hacking my way along with API?
>>>>> 
>>>>> Thanks & Regards
>>>>> Ashish Saini aka Ashfame
>>>>> (Deserve Before You Desire)
>>>>> Homepage : http://www.ashfame.com | Blog : http://blog.ashfame.com
>> |
>>>>> Twitter : http://twitter.com/ashfame
>>>>> 
>>>> _______________________________________________
>>>> wp-hackers mailing list
>>>> wp-hackers at lists.automattic.com
>>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>>> 
>>> 
>>> 
>>> ------------------------------
>>> 
>>> _______________________________________________
>>> wp-hackers mailing list
>>> wp-hackers at lists.automattic.com
>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>> 
>>> 
>>> End of wp-hackers Digest, Vol 66, Issue 101
>>> *******************************************
>>> 
>> 
>> 
>> 
>> -- 
>> Thank you,
>> 
>> Jared Williams
>> Web/Graphic Designer
>> Tweeaks.com  |  New2WP.com
>> _______________________________________________
>> wp-hackers mailing list
>> wp-hackers at lists.automattic.com
>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>> _______________________________________________
>> wp-hackers mailing list
>> wp-hackers at lists.automattic.com
>> http://lists.automattic.com/mailman/listinfo/wp-hackers
> 



More information about the wp-hackers mailing list