Verwendung des neuen “posts_clauses” -Filters in WordPress 3.1?

Gerade bemerkt, dass 3.1 einen neuen Filter hinzugefügt hat, um Abfragen anzupassen: posts_clauses. Alles, was ich darüber herausfinden konnte, ist, dass Sie nicht die separaten Abfragefilter wie posts_where oder posts_join verwenden müssen, sondern alle auf einmal bearbeiten können. Ich habe mich gefragt, ob jemand ein Beispiel für die Verwendung des neuen Filters “posts_clauses” geben könnte.

Solutions Collecting From Web of "Verwendung des neuen “posts_clauses” -Filters in WordPress 3.1?"

Unten ist die Frage, die ich irgendwo gefunden habe und durch sie ging. Der Zweck der Abfrage besteht darin, die Beiträge basierend auf der Taxonomie zu sortieren. Also teile ich den Code, damit er die Verwendung von posts_clauses verstehen kann.

function color_clauses_mike( $clauses, $query ) { global $wpdb; if ( isset( $query->query['orderby'] ) && 'color' == $query->query['orderby'] ) { $clauses['join'] .= < <term_relationships} ON {$wpdb->posts}.ID={$wpdb->term_relationships}.object_id LEFT OUTER JOIN {$wpdb->term_taxonomy} USING (term_taxonomy_id) LEFT OUTER JOIN {$wpdb->terms} USING (term_id) SQL; $clauses['where'] .= " AND (taxonomy = 'color' OR taxonomy IS NULL)"; $clauses['groupby'] = "object_id"; $clauses['orderby'] = "GROUP_CONCAT({$wpdb->terms}.name ORDER BY name ASC) "; $clauses['orderby'] .= ( 'ASC' == strtoupper( $query->get('order') ) ) ? 'ASC' : 'DESC'; } return $clauses; } add_filter( 'posts_clauses', 'color_clauses_mike', 10, 2 ); 

Hier ist die Quelle, wo ich die obige Abfrage gefunden habe: http://scribu.net/wordpress/sortable-taxonomy-columns.html

Die Antwort von scribu / Hameedullah ist ein großartiger pointers, aber es wird Beiträge verbergen, die Mitglied einer anderen Taxonomie (zB “Kategorie”) sind, aber nicht von “Farbe”. Ich habe den Code geändert, und das scheint großartig zu funktionieren:

 if ( isset( $wp_query->query['orderby'] ) && 'color' == $wp_query->query['orderby'] ) { $clauses['join'] .= < <term_relationships} ON {$wpdb->posts}.ID={$wpdb->term_relationships}.object_id LEFT OUTER JOIN {$wpdb->term_taxonomy} ON wp_term_taxonomy.term_taxonomy_id=wp_term_relationships.term_taxonomy_id AND wp_term_taxonomy.taxonomy='color' LEFT OUTER JOIN {$wpdb->terms} USING (term_id) SQL; $clauses['groupby'] = "wp_posts.ID"; $clauses['orderby'] = "GROUP_CONCAT({$wpdb->terms}.name ORDER BY name ASC) "; $clauses['orderby'] .= ( 'ASC' == strtoupper( $wp_query->get('order') ) ) ? 'ASC' : 'DESC'; }