[wp-trac] [WordPress Trac] #14349: Filter to query_posts() args
WordPress Trac
wp-trac at lists.automattic.com
Mon Jul 19 20:48:05 UTC 2010
#14349: Filter to query_posts() args
-------------------------+--------------------------------------------------
Reporter: lucaswxp | Owner:
Type: enhancement | Status: closed
Priority: normal | Milestone:
Component: Query | Version: 3.0
Severity: normal | Resolution: worksforme
Keywords: |
-------------------------+--------------------------------------------------
Changes (by scribu):
* keywords: needs-patch =>
* status: new => closed
* resolution: => worksforme
* milestone: 3.1 =>
Comment:
Most times, when you have to manipulate the raw SQL request, you need to
alter multiple sections in the query. Therefore, you need to register a
callback for each SQL segment and repeat the same check in each callback:
{{{
function fictional_alter_where( $where, $wp_query ) {
if ( $wp_query->get( 'custom_var' ) ) {
$where .= " AND meta_value IN ( 'foo', 'bar' )";
}
return $where;
}
add_filter( 'posts_where', 'fictional_alter_where' );
function fictional_alter_join( $join, $wp_query ) {
global $wpdb;
if ( $wp_query->get( 'custom_var' ) ) {
$join .= " JOIN $wpdb->postmeta ON ($wpdb->posts.ID =
$wpdb->postmeta.post_id )";
}
return $join;
}
add_filter( 'posts_where', 'fictional_alter_join' );
}}}
I think you'll agree that this is pretty cumbersome.
Using wp-query-manipulation.php:
{{{
function fictional_alter_query( $bits, $wp_query ) {
global $wpdb;
if ( $wp_query->get( 'custom_var' ) ) {
$bits['where'] .= " AND meta_value IN ( 'foo', 'bar' )";
$bits['join'] .= " JOIN $wpdb->postmeta ON ($wpdb->posts.ID =
$wpdb->postmeta.post_id )";
}
return $bits;
}
new WP_Query_Manipulation( 'fictional_alter_query' );
}}}
I'm so happy I've found an easier way to do this and it doesn't even
require a patch. Thanks, lucaswxp :D
--
Ticket URL: <http://core.trac.wordpress.org/ticket/14349#comment:9>
WordPress Trac <http://core.trac.wordpress.org/>
WordPress blogging software
More information about the wp-trac
mailing list