wake-up-neo.com

Verwendung des neuen Filters "posts_clauses" in Wordpress 3.1?

Gerade bemerkt, dass 3.1 einen neuen Filter zum Anpassen von Abfragen hinzugefügt hat: posts_clauses. Ich konnte nur feststellen, dass Sie anstelle der separaten Abfragefilter wie posts_where oder posts_join 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.

6
Manny Fleurmond

Unten ist die Abfrage, die ich irgendwo gefunden habe und durchlaufen habe. Der Zweck der Abfrage besteht darin, die Beiträge nach Taxonomie zu sortieren. Ich teile den Code, damit Sie die Verwendung von posts_clauses besser verstehen.

function color_clauses_mike( $clauses, $query ) {
global $wpdb;

if ( isset( $query->query['orderby'] ) && 'color' == $query->query['orderby'] ) {

    $clauses['join'] .= <<<SQL
LEFT OUTER JOIN {$wpdb->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, in der ich die obige Abfrage gefunden habe: http://scribu.net/wordpress/sortable-taxonomy-columns.html

6

Die Antwort von scribu/Hameedullah ist ein großartiger Hinweis, aber es werden Posts ausgeblendet, die Mitglied einer anderen Taxonomie (z. B. "Kategorie"), aber nicht "Farbe" sind. Ich habe den Code geändert und dies scheint großartig zu funktionieren:

if ( isset( $wp_query->query['orderby'] ) && 'color' == $wp_query->query['orderby'] ) {

    $clauses['join'] .= <<<SQL
LEFT OUTER JOIN {$wpdb->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';
}
1
Yousef