| [21] | 1 | <?php |
|---|
| 2 | |
|---|
| 3 | define('RC_CWP_QUERY_PERFIX', 'x_'); |
|---|
| 4 | define('RC_CWP_QUERY_ORDERBY', 'customorderby'); |
|---|
| 5 | |
|---|
| 6 | class RCCWP_Query |
|---|
| 7 | { |
|---|
| 8 | |
|---|
| 9 | function FilterPrepare(&$qs) |
|---|
| 10 | { |
|---|
| 11 | global $curr_qs_vars; |
|---|
| 12 | $curr_qs_vars = $qs->query_vars; |
|---|
| 13 | return $qs; |
|---|
| 14 | } |
|---|
| 15 | |
|---|
| 16 | |
|---|
| 17 | |
|---|
| 18 | function FilterCustomPostsWhere($where) |
|---|
| 19 | { |
|---|
| 20 | global $wpdb; |
|---|
| 21 | global $curr_qs_vars; |
|---|
| 22 | |
|---|
| 23 | foreach ($curr_qs_vars as $queryVarKey => $queryVarValue){ |
|---|
| 24 | if (substr($queryVarKey, 0, strlen(RC_CWP_QUERY_PERFIX)) == RC_CWP_QUERY_PERFIX){ |
|---|
| 25 | $customKey = substr($queryVarKey, strlen(RC_CWP_QUERY_PERFIX)); |
|---|
| 26 | $customVal = $queryVarValue; |
|---|
| 27 | $where = $where . " AND 0 < (SELECT count($wpdb->postmeta.meta_value) |
|---|
| 28 | FROM $wpdb->postmeta |
|---|
| 29 | WHERE $wpdb->postmeta.post_id = $wpdb->posts.ID and $wpdb->postmeta.meta_key = '$customKey' and $wpdb->postmeta.meta_value = '$customVal') "; |
|---|
| 30 | } |
|---|
| 31 | } |
|---|
| 32 | |
|---|
| 33 | //Add orderby |
|---|
| 34 | if (get_query_var(RC_CWP_QUERY_ORDERBY)){ |
|---|
| 35 | $newOrderby = get_query_var(RC_CWP_QUERY_ORDERBY); |
|---|
| 36 | $newOrderbyFieldName = substr($newOrderby, strlen(RC_CWP_QUERY_PERFIX)); |
|---|
| 37 | $where = $where . " AND pmeta.meta_key = '$newOrderbyFieldName' "; |
|---|
| 38 | } |
|---|
| 39 | |
|---|
| 40 | return $where; |
|---|
| 41 | |
|---|
| 42 | |
|---|
| 43 | } |
|---|
| 44 | |
|---|
| 45 | function FilterCustomPostsOrderby($orderby) |
|---|
| 46 | { |
|---|
| 47 | global $wpdb; |
|---|
| 48 | |
|---|
| 49 | if (get_query_var(RC_CWP_QUERY_ORDERBY)){ |
|---|
| 50 | $newOrderby = get_query_var(RC_CWP_QUERY_ORDERBY); |
|---|
| 51 | $newOrderbyFieldName = substr($newOrderby, strlen(RC_CWP_QUERY_PERFIX)); |
|---|
| 52 | $orderby = "pmeta.meta_value ".get_query_var('order'); |
|---|
| 53 | } |
|---|
| 54 | |
|---|
| 55 | return $orderby; |
|---|
| 56 | |
|---|
| 57 | } |
|---|
| 58 | |
|---|
| 59 | function FilterCustomPostsFields($fields) { |
|---|
| 60 | global $wpdb; |
|---|
| 61 | if (get_query_var(RC_CWP_QUERY_ORDERBY)){ |
|---|
| 62 | $newOrderby = get_query_var(RC_CWP_QUERY_ORDERBY); |
|---|
| 63 | $newOrderbyFieldName = substr($newOrderby, strlen(RC_CWP_QUERY_PERFIX)); |
|---|
| 64 | $fields = $fields. " , pmeta.meta_value "; |
|---|
| 65 | } |
|---|
| 66 | |
|---|
| 67 | return $fields; |
|---|
| 68 | } |
|---|
| 69 | |
|---|
| 70 | function FilterCustomPostsJoin($join) { |
|---|
| 71 | global $wpdb; |
|---|
| 72 | |
|---|
| 73 | if (get_query_var(RC_CWP_QUERY_ORDERBY)){ |
|---|
| 74 | $join = $join . " INNER JOIN $wpdb->postmeta pmeta ON $wpdb->posts.ID = pmeta.post_id "; |
|---|
| 75 | |
|---|
| 76 | } |
|---|
| 77 | |
|---|
| 78 | return $join; |
|---|
| 79 | } |
|---|
| 80 | |
|---|
| 81 | |
|---|
| 82 | } |
|---|
| 83 | ?> |
|---|