我正在一個項目,顯示按目標地址的距離排序的半徑輸入的帖子類型。 現在我使用此查詢工作正常:
Wordpress SQL查詢與多個分類法
sql = " SELECT SQL_CALC_FOUND_ROWS DISTINCT wposts.post_id, (" . $_GET['mikm'] . " * acos(cos(radians($lat)) * cos(radians(wposts.lat)) * cos(radians(wposts.long) - radians($long)) + sin(radians($lat)) * sin(radians(wposts.lat)))) AS distance
FROM post_address wposts
WHERE wposts.post_type ='" . $post_type . "'
HAVING distance <= $radius OR distance IS NULL ORDER BY distance LIMIT " . $from_page . "," . $per_page;
post_address是持有帖子ID,崗位類型和地址的表。當一個職位正在保存或更新的地址,這張表正在更新信息。 我使用的表格有地址欄,複選框選擇英里或公里,以及下拉菜單中的距離。我使用分頁的形式獲取方法。
雖然上面的查詢工作正常,我想添加分類法支持。我設法使其使用
wp_dropdown_categories($tax_name)
和SQL一個分類工作:
SELECT SQL_CALC_FOUND_ROWS DISTINCT wposts.post_id, (" . $_GET['mikm'] . " * acos(cos(radians($lat)) * cos(radians(wposts.lat)) * cos(radians(wposts.long) - radians($long)) + sin(radians($lat)) * sin(radians(wposts.lat)))) AS distance
FROM post_address wposts
LEFT JOIN $wpdb->term_relationships ON (wposts.post_id = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
LEFT JOIN $wpdb->terms ON($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id)
WHERE wposts.post_type ='" . $post_type . "'
AND $wpdb->term_taxonomy.taxonomy IN ('" $tax_name "')
AND ($wpdb->term_taxonomy.parent IN (" . $_GET[$tax_name] . ") OR $wpdb->term_taxonomy.term_id IN (" . $_GET[$tax_name] . "))
HAVING distance <= $radius OR distance IS NULL ORDER BY distance LIMIT " . $from_page . "," . $per_page;
現在 ,因爲一個分類法做工精細,我想,使其與多個分類工作那就是我卡住的地方。如果例如郵政類型「汽車」有2個分類「模型」和「顏色」,我希望能夠過濾具有「這個」模型和「這個」顏色的帖子。我不知道有多少分類存在於帖子類型中(誰將使用此插件將在管理設置中手動輸入),並且他們現在被保存在數組中。例如 $分類=陣列( 'car_model', 'car_color')和i可以填充類別下拉使用:
`
foreach ($taxonomies as $tax) {
echo '<div id="' . $tax . '_cat">';
echo '<label for="category-id">Choose category: </label>';
custom_taxonomy_dropdown($tax);
echo '</div>';
`
和
function custom_taxonomy_dropdown($tax_name) {
$args = array(
'taxonomy' => $tax_name,
'hide_empty' => 0,
'depth' => 10,
'hierarchical' => 1,
'id' => $tax_name . '_id',
'name' => $tax_name,
'selected' => $_GET[$tax_name],
'show_option_all' => 'All categories',
);
wp_dropdown_categories($args);
}
的下拉菜單工作正常,輸出發送到網址,但我無法找到將使其工作的SQL查詢。
這是我的第一個項目。對不起,如果這個問題太長了,但我想盡可能清楚。我也不確定上面的代碼是否是最好的方式,但任何人的幫助都會得到很大的讚賞。
UPDATE:
下面是我現在使用的代碼,並將其與多個分類工作。但是,我仍然遇到一些問題。當我在所有分類中選擇「所有類別」的SQL看起來像:
AND $wpdb->term_taxonomy.term_id IN()
和計會顯示COUNT(*)= 0,這帶來了不結果,而不是所有的結果。
其他問題是帶孩子和孫子的分類。當我選擇父類別時,我希望得到所有子類和孫類的結果。但由於沒有帖子附加到父母,但其子類別我沒有得到任何結果。 現在這是我的代碼:
"SELECT SQL_CALC_FOUND_ROWS DISTINCT wposts.post_id, (" . $_GET['mikm'] . "* acos(cos(radians($lat)) * cos(radians(wposts.lat)) * cos(radians(wposts.long) - radians($long)) + sin(radians($lat)) * sin(radians(wposts.lat)))) AS distance
FROM posts_address wposts
LEFT JOIN $wpdb->term_relationships ON (wposts.post_id = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
LEFT JOIN $wpdb->terms ON($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id)
WHERE
wposts.post_type IN ('" . $post_type . "')
AND $wpdb->term_taxonomy.term_id IN (" . $total_terms .")
GROUP BY wposts.post_id, wposts.lat, wposts.long
HAVING count(*) = " . $bc . " AND distance <= $radius OR distance IS NULL ORDER BY distance LIMIT " . $from_page . "," . $per_page ;
任何幫助appriciated。
這種行爲可能意味着,對於WordPress,選擇沒有類別意味着選擇所有類別。這提出了一個問題,因爲我描述的方法需要知道有多少種類。我將測試沒有選擇類別的情況,並將PHP代碼中的查詢參數更改爲所有分類法類別的列表(即刪除空類別,意思是「所有類別」) – 2012-04-27 18:38:53
s/empty類別最小/空類別列表/ – 2012-04-27 19:10:49
這就是我現在正在做的。我試圖創建一個案件,當沒有類別選擇。對於兒童和孫子類別,我正在調整一些代碼。我必須使用get_term_children()來運行foreach循環,以檢查我選擇的術語是否是父級,如果是,則獲取其子標識符。然後我使用這些ID運行SQL。否則它會運行我選擇的術語。我到了那裏。再次感謝。這非常歡迎這個社區。你幫了我很多。 – Eyal 2012-04-27 19:24:44