2012-07-10 94 views
0

我有一個插件可以對搜索頁面和分類頁面上的帖子進行排序。循環已經考慮到了縮小結果的範圍,所以我需要的是能夠將我的自定義元值進行排序。在這種情況下價格。我希望能夠覆蓋現有的查詢,替換任何特殊字符,然後根據乾淨的元值進行排序。從wp_query中排序meta_value,但在排序前刪除特殊字符

我用這個選擇,但問題是它querys的數據庫,而不是在wp_query發現reults上的所有帖子,這可以如果你只使用它減慢排序極大

function join_it($join) { 
global $wpdb; 
    $sym = get_option('sort_by_ignore'); 
    $join .= "LEFT JOIN (SELECT $wpdb->prefix" . "postmeta.post_id AS ID, CAST(REPLACE(REPLACE(REPLACE($wpdb->prefix" . "postmeta.meta_value, ',', ''), '" . $sym . "',''),' ','') AS SIGNED) AS price FROM $wpdb->prefix" . "postmeta WHERE meta_key = 'my_price'" . ") P ON (P.ID = wp_posts.ID)"; 

return $join; 
} 
add_filter('posts_join', 'join_it'); 

$args = array_merge($wp_query->query, array('caller_get_posts' => 1,'paged' => $paged)); 

     query_posts($args); 

回答

1

排序,使用posts_orderby篩選器可能會更好,而不是posts_join

如果您發現過濾器影響其他查詢,那麼只要在您需要它的地方運行,就可以使用remove_filter

我的回答here做了一些類似的事情(沒有使用replace函數清理值 - 我不得不放棄它,我認爲)。

+0

真棒,不完全是我的答案,但這導致我在正確的方向!你搖滾! – thesanerone 2012-07-10 22:12:47

+0

優秀;樂意效勞。 – Hobo 2012-07-11 05:48:58