2015-07-22 22 views
1

我正在使用自定義帖子類型在我的wordpress網站中創建用戶。我正在整合用戶列表的高級搜索。在這種情況下,我需要按年齡範圍搜索用戶,例如21 - 3031 - 40,但我只有用戶在數據庫中出生的日期。正如你在wordpress文章中所知道的那樣,它在wp_postmeta表中被存儲爲meta_keymeta_value查看我的年齡段是否與存儲在數據庫中的'出生日期'匹配

我在寫我自己的自定義查詢檢索部:

$queryStr = "SELECT DISTINCT ID, wposts.* FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta WHERE wposts.ID = wpostmeta.post_id"; 

//if nationality is not empty check it in the DB 
if($sltNationality != '' && $sltNationality != 'Any') : 
    $queryStr .= " AND wpostmeta.meta_key = 'nationality' AND wpostmeta.meta_value = '$sltNationality'"; 
endif; 

//if age range is not empty check it 
if($age != '' && $age != 'Any') : 
    $queryStr .= " check age between condition "; 
endif; 

//execute 
$pageposts = $wpdb->get_results($queryStr, OBJECT); 

現在我的年齡段stucked。作爲從互聯網搜索,很高興我發現了一個來自stackoverflow的代碼。 get age from DOB

但不知道如何在我的自定義查詢中使用這個。請幫助我們。謝謝

+0

數據庫中出生日期的格式是什麼? 'YYYY-MM-DD'? – vard

+0

'dd-mm-yy'這是格式 – nanbatman

回答

1

你應該讓Wordpress爲你構建這個元查詢 - 你可以使用get_posts來實現這一點。

這裏有一個建議:

$meta_query = array(); 
if($sltNationality != '' && $sltNationality != 'Any') { // nationality query 
    array_push($meta_query, array(
     'key'  => 'nationality', 
     'value'  => $sltNationality 
    )); 
} 
if($age != '' && $age != 'Any') { // age query 
    // assuming your select values are always in this format : 21 - 30, 31 -40 etc. 
    $age = explode(' - ', $age); 
    $min_year = (int)date('Y') - (int)$age[1]; 
    $max_year = (int)date('Y') - (int)$age[0]; 
    // build a regex to get all the birth date in the year range 
    $year_regex = array(); 
    for($y = $min_year; $y < $max_year; $y++) { 
     array_push($year_regex, strval($y)); 
    } 
    array_push($meta_query, array(
     'key'  => 'age', 
     'value'  => '^[0-9]{2}-[0-9]{2}-('.implode('|', $year_regex).')$', 
     'compare' => 'REGEXP' 
    )); 
} 
$args = array(
    'posts_per_page' => -1, 
    'post_type' => 'user', 
    'meta_query' => $meta_query 
); 
$users = get_posts($args); 

您應該檢查post_type名稱是確定的,那選擇的值總是相匹配的「YY - YY」格式 - 如果不是你將不得不做一些特殊情況。

+0

我認爲你的'foreach'應該是一個'for循環'的權利?好的,讓我先試一試。 – nanbatman

+0

是的,這是'for' - 更新我的回答 – vard

+0

我刪除了substr(),因爲它只返回一年中的最後兩位數。現在它的工作。真棒!謝了,兄弟。 – nanbatman

相關問題