2014-05-08 71 views
1

我有一個網站,檢測用戶的位置,並只顯示具有匹配城市分類的職位。如果沒有匹配,用戶將被重定向到一個頁面以選擇可用的城市。這是我的函數:如何將變量傳遞給函數function.php(Wordpress站點)

function my_location($q){ 
if (!$q->is_main_query()) 
    return; 
if ($q->is_search()) 
    return; 
if ($q->is_archive()){ 
    if (! is_admin()) { 
     if ($userSlug!='Set'){ 
     $userInfo = geoip_detect_get_info_from_current_ip(); 
     switch ($userInfo->postal_code){ 
     case '86403':   
     case '86404':   
     case '86405': 
     case '86406':   
      $city="lake-havasu-city";   
      break;   
     case '86401':   
     case '86402':   
     case '86409':      
      $city="kingman";    
      break; 
     case '86429':   
     case '86430':   
     case '86439': 
     case '86442':   
      $city="bullhead-city";   
      break; 
     default: 
      force_post_city($city); 
      exit; 
     } 
$q->set('tax_query', array(array('taxonomy' => 'pa_city','field' => 'slug',terms' => array($city),'operator' => 'IN'))); 
    }} 
} 
} 
add_action('pre_get_posts', 'my_location'); 

我的問題是,用戶選擇城市的頁面上,我該如何通過城市回到這個功能,因此,他們將拉動相應的城市?這是我的形式:

<form method="post" action="new_location($term_taxonomy)"> 
<?php 
function get_terms_dropdown($taxonomies, $args){ 
$myterms = get_terms($taxonomies, $args); 
$optionname = "optionname"; 
$emptyvalue = ""; 
$output ="<select name='".$optionname."'><option selected='".$selected."'  value='".$emptyvalue."'>Select a City</option>'"; 
foreach($myterms as $term){ 
$term_taxonomy=$term->pa_city; //CHANGE ME 
$term_slug=$term->slug; 
$term_name =$term->name; 
$link = $term_slug; 
$output .="<option name='".$link."' value='".$link."'>".$term_name."</option>"; 
} 
$output .="</select>"; 
return $output; 
} 
$taxonomies = array('pa_city'); // CHANGE ME 
$args = array('order'=>'ASC','hide_empty'=>true); 
echo get_terms_dropdown($taxonomies, $args);     
?> 
<input type="submit" value="click" name="submit"> 

</form> 

任何幫助將不勝感激!

+1

我對WP的這種程度的細節並不熟悉,但是:你有沒有爲你的城市形態工作的「行動」目標?如果是這樣,當用戶提交時,你能設置一個會話變量嗎?因此,當該網站試圖通過分類法顯示其帖子時,它可以嘗試檢測城市,首先通過地理/ IP檢測,然後通過會話。事實上,我會在會話中緩存geo/IP檢測 - 您不希望爲每個頁面視圖進行冗餘HTTP調用。 – halfer

+1

謝謝!你指出我正確的方向。 –

回答

1

會議建議是關鍵。我選擇了一個cookie來代替。所以,我首先添加了一個函數來檢查wordpress的init中的cookie。如果它不存在,我們嘗試確定它們的位置並寫入cookie。然後在pre_get_post掛鉤,我們引導他們要麼頁面與市交易或FF自己的城市不符合現有的城市,我們引導他們到搜索城市頁面:

add_action('init', 'my_setcookie'); 
    function my_setcookie() { 
    if(!isset($_COOKIE['city'])) { 
     $userInfo = geoip_detect_get_info_from_current_ip(); 
     switch ($userInfo->postal_code){ 
       case '86403':   
     case '86404':   
     case '86405': 
     case '86406':   
      $city="lake-havasu-city";   
      break; 
     case '86401':   
     case '86402':   
     case '86409':      
      $city="kingman";    
      break; 
     case '86429':   
     case '86430':   
     case '86439': 
     case '86442':   
      $city="bullhead-city";   
      break; 
     } 
    setcookie('city', $city, time() + 3600, COOKIEPATH, COOKIE_DOMAIN); 
    }} 
    function my_location($q){ 
if (!$q->is_main_query()) 
    return; 
if ($q->is_search()) 
    return; 
if ($q->is_archive()){ 
    if (! is_admin()) { 
     if ($userSlug!='Set'){ 
      if (empty($_COOKIE['city'])) { 
       echo "<script>window.location.href =  'http://thewebsite.com/select-city/';</script>"; 
       exit(); 
      } 
     $city = isset($_COOKIE['city']) ? $_COOKIE['city'] : 'not set'; 
     $q->set('tax_query', array(array(   'taxonomy' => 'pa_city',   'field' => 'slug',   'terms' => array( $city),   'operator' => 'IN'  )));  
    }} 
    } 
    } 

    add_action('pre_get_posts', 'my_location'); 

所以現在我們有他們在搜索城市頁面。我們拉可用的城市從屬性字段,並一一列舉了,當點擊標題中的一個JavaScript執行更新的cookie,並將它們發送到交易:

  <form name="myCity" action="http://thewebsite.com/" method="POST"> 
      <?php 
       function get_terms_dropdown($taxonomies, $args){ 
       $myterms = get_terms($taxonomies, $args); 
       $optionname = "optionname"; 
       $emptyvalue = ""; 
       $output ="<select name='".$optionname."'><option selected='".$selected."' value='".$emptyvalue."'>Select a City</option>'"; 

       foreach($myterms as $term){ 
       $term_taxonomy=$term->pa_city; //CHANGE ME 
       $term_slug=$term->slug; 
       $term_name =$term->name; 
       $link = $term_slug; 
       $output .="<option name='".$link."' value='".$link."'>".$term_name."</option>"; 
       } 
       $output .="</select>"; 
       return $output; 
       } 

       $taxonomies = array('pa_city'); 
       $args = array('order'=>'ASC','hide_empty'=>true); 
       echo get_terms_dropdown($taxonomies, $args); 

       ?> 
       <input type="submit" value="click" name="submit" onclick="WriteCookie()"> 
       </form> 

這裏是JavaScript,我們刪除現有的cookie並設置新的:

   <script type="text/javascript"> 

       function WriteCookie() 
       { 
        document.cookie = "city" + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;'; 
        cookievalue = escape(document.myCity.optionname.value) + ";" 
        document.cookie='city='+cookievalue +'; expires=Fri, 3 Aug 2021 20:47:11 UTC; path=/'; 
        window.location.href = "http://thewebsite.com" 

       } 

就像一個魅力!感謝Halfer的會議建議。

+0

很好的解決方法。 :) –