2011-12-15 10 views
0

私はポストテーブルから選択する必要があります、各投稿は1つのカテゴリとタグに関連しています。 特定のタグやカテゴリを選択する必要があります。 用語表にはカスタム項目「menu_order」があり、カテゴリの順序を設定するために使用されます。 そのフィールドで投稿を並べ替える必要があります。 私は、プレーン選択しない場合:Wordpress custom QUERY

SELECT * from wp_posts 

LEFT 
JOIN wp_term_relationships 
ON (wp_term_relationships.object_id = wp_posts.ID) 

LEFT 
JOIN wp_terms 
ON (wp_terms.term_id = wp_term_relationships.term_taxonomy_id) 

WHERE 1=1 
AND wp_posts.post_type = 'post' 
AND (
wp_posts.post_status = 'publish' 
OR wp_posts.post_status = 'private' 
) 
LIMIT 0, 20 

を、私は結果を得る:ちょうどイントロで

+----------------+----------------+----------+---------------------+ 
| POST ID  | Term name | order |  type   | 
+----------------+----------------+----------+---------------------+ 
|  2  |  Fire  | 1  |  category  | 
+----------------+----------------+----------+---------------------+ 
|  2  |  blue  | 0  |   tag   | 
+----------------+----------------+----------+---------------------+ 

を。

もし私がWHERE $ wpdb-> terms.term_id = 170とすれば、私は1回の返品しかありません。

+----------------+----------------+----------+---------------------+ 
| POST ID  | Term name | order |  type   | 
+----------------+----------------+----------+---------------------+ 
|  2  |  blue  | 0  |   tag   | 
+----------------+----------------+----------+---------------------+ 

カテゴリまたは/およびタグでフィルタリングしてから、POSTに関連付けられたカテゴリからTERM_ORDERを取得する必要があります。

私はどのような結果が出ても、関連するカテゴリから順番に取り出されます。

私はMYSQLであまり強くないので、これは私を困惑させます。すべての入力は役に立ちます:)

更新 ------------------------------------ --------------

狂ったコーディングの後、私は自分が望むものを得ることができました。 これはおそらく醜いゆっくりだが、うまく動作するので、あなたの息を止めないでください。

まず、すべての商品が収集されるビューを作成します。その後

$qqquery = " 
CREATE VIEW samsam AS 
SELECT 
ID, post_content, post_title, post_excerpt, post_status, post_name, guid, post_type, $wpdb->term_relationships.term_taxonomy_id as cat_term_taxonomy_id, tt1.term_taxonomy_id as tag_term_taxonomy_id 

FROM $wpdb->posts 

LEFT     
JOIN $wpdb->term_relationships 
ON ($wpdb->term_relationships.object_id = $wpdb->posts.ID) 

LEFT 
JOIN $wpdb->term_relationships AS tt1 
ON (tt1.object_id = $wpdb->posts.ID) 

WHERE 1=1 
AND $wpdb->posts.post_type = 'post' 
AND (
$wpdb->posts.post_status = 'publish' 
OR $wpdb->posts.post_status = 'private' 
) 
AND (      wp_term_relationships.term_taxonomy_id IN ($query_cat) // ID's of categories, seperated by coma 
AND tt1.term_taxonomy_id IN (' . $add_query_tag_id . ') //ID's of POSTS seperated by coma 
) 
ORDER BY $wpdb->term_relationships.term_taxonomy_id DESC 
"; 
$wpdb->query($qqquery); 

私は重複を除外するIDでグループそして、私はビューを選択する場所照会と注文> 0をフィルタリングすることで、カテゴリの順番を得るために、関係や用語に参加します。それは何

$querystr = " 
SELECT * from samsam 

LEFT 
JOIN $wpdb->term_relationships 
ON (samsam.ID = $wpdb->term_relationships.object_id) 

LEFT 
JOIN $wpdb->terms 
ON ($wpdb->terms.term_id = $wpdb->term_relationships.term_taxonomy_id) 
AND ($wpdb->terms.menu_order > 0) 

WHERE menu_order > 0 

GROUP BY ID 

ORDER BY menu_order ASC 

LIMIT $item_limit_offset, $item_limit_pp"; // first is calculation of products to skip, second is how many posts per page 

$pageposts = $wpdb->get_results($querystr, OBJECT); 

カテゴリー1(順位1を持っている) ポスト ポスト ポスト

カテゴリー3(順位2を持っている) ポスト ポスト ポスト

カテゴリー2(注文3を持つ) 投稿 投稿 ポスト

タグやカテゴリによって制限、オフセット、ページ変更することができます。

私は注文カテゴリに余分なフィールドを追加するプラグイン "Term Menu Order"を使用しました。

よろしくお願いいたします。

答えて

1

ここで独自のクエリを書いていますか? Wordpressはデータを取り出すための関数を組み込んでいます。

http://codex.wordpress.org/Template_Tags/get_posts http://codex.wordpress.org/Function_Reference/query_posts

+0

応答を提供するためのおかげで、私は、悪いコーディングの多くを使用することによって、私が欲しかったものを達成するために管理のおかげで、元のポストに投稿された素敵な一日、解像度を持っている:) – LatvjuAvs