Post テーブルから選択する必要があります。各投稿は 1 つのカテゴリとタグに関連付けられています。特定のタグやカテゴリを選択する必要があります。用語テーブルにはカスタム フィールド「menu_order」があり、カテゴリの順序を設定するために使用されます。そのフィールドで投稿を並べ替えたい。単純に選択する場合:
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を実行すると、TAG は 1 つしか返されません。
+----------------+----------------+----------+---------------------+
| POST ID | Term name | order | type |
+----------------+----------------+----------+---------------------+
| 2 | blue | 0 | tag |
+----------------+----------------+----------+---------------------+
POSTS を選択し、カテゴリやタグでフィルターしてから、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);
その後、ビューを選択してリレーションシップと用語を結合し、order > 0 を除外してカテゴリの順序を取得し、グループ BY id で重複を除外するクエリを実行します。
$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日を。