2014-12-03 104 views
0

我正在爲woocommerce創建一個搜索表單,這樣我可以選擇一些從屬性中拉出的選項,然後當我提交時我會得到精緻的產品選擇。我爲屬性創建了一個選擇,但我無法從特定屬性中獲取術語。我如何鏈接這兩個?Woocommerce鏈接屬性和條款

global $woocommerce, $post, $product; 

    $class = ' dnd_service_box_' . $class; 

    $attribute_array = array(); 
    $attribute_taxonomies = wc_get_attribute_taxonomies(); 

    if ($attribute_taxonomies){ 
     foreach ($attribute_taxonomies as $tax){ 
      if (taxonomy_exists(wc_attribute_taxonomy_name($tax->attribute_name))){ 
       $attribute_array[ $tax->attribute_name ] = $tax->attribute_name;          
      } 
     } 
    } 


    $options = array(); 
    $options[] = "<option value=''>--?--</option>"; 
    foreach ($attribute_taxonomies as $tax) { 
     $options[] = "<option value='{$tax->attribute_name}'>{$tax->attribute_label}</option>"; 
    } 

    $return = '<div class="dnd_sentence_search'.$class.'"> 
        <h3>'._e('Attributes','theme').'</h3> 
        <select class="" id="attributes" size="1" name="attributes"> 
         '.implode("\n", $options).' 
        </select> 

       </div>'; 

    return $return; 

這將返回屬性。當我做print_r($attribute_taxonomies);我走出這個

Array 
(
[0] => stdClass Object 
    (
     [attribute_id] => 2 
     [attribute_name] => product-year 
     [attribute_label] => Year 
     [attribute_type] => select 
     [attribute_orderby] => menu_order 
    ) ... 

我如何可以訪問這些分類法所有條款和如何使它這樣,當我選擇一個(如年),在其他的選擇,我只能請參閱年份屬性中的條款?

編輯:

我添加了另一個代碼,這將使我而言

foreach ($attribute_taxonomies as $tax) { 
    if (taxonomy_exists(wc_attribute_taxonomy_name($tax->attribute_name))){ 
     $taxonomy_terms[$tax->attribute_name] = get_terms(wc_attribute_taxonomy_name($tax->attribute_name)); 
    } 
} 

現在我$attribute_taxonomies生產這種數組:

Array 
(
    [0] => stdClass Object 
     (
      [attribute_id] => 2 
      [attribute_name] => product-year 
      [attribute_label] => Year 
      [attribute_type] => select 
      [attribute_orderby] => menu_order 
     ) ... 

從我可以得到所有的名字和標籤。在$ taxonomy_terms會給MI這種類型的數組:

Array 
(
    [product-year] => Array 
     (
      [0] => stdClass Object 
       (
        [term_id] => 77 
        [name] => 1989 
        [slug] => 1989 
        [term_group] => 0 
        [term_taxonomy_id] => 82 
        [taxonomy] => pa_product-year 
        [description] => 
        [parent] => 0 
        [count] => 6 
        [meta_id] => 22 
        [woocommerce_term_id] => 77 
        [meta_key] => order_pa_product-year 
        [meta_value] => 0 
       ) 

      [1] => stdClass Object 
       (

所以每個attribute-name我得到相應的條款。但這些是不同的陣列。第一個是一個簡單的數組,第二個是多維數組。

有沒有一種方法來檢查從第一個屬性名稱匹配從第二個密鑰,然後我只需要從第二個數組中獲取值。這聽起來很複雜...

EDIT2:好的,我想通了,如何顯示的條款,但我還是想鏈接它:

$attribute_array = array(); 
$taxonomy_terms = array(); 
$attribute_taxonomies = wc_get_attribute_taxonomies(); 

if ($attribute_taxonomies){ 
    foreach ($attribute_taxonomies as $tax){ 
     if (taxonomy_exists(wc_attribute_taxonomy_name($tax->attribute_name))){ 
      $attribute_array[ $tax->attribute_name ] = $tax->attribute_name;          
     } 
    } 
} 

foreach ($attribute_taxonomies as $tax) { 
    if (taxonomy_exists(wc_attribute_taxonomy_name($tax->attribute_name))){ 
     $taxonomy_terms[$tax->attribute_name] = get_terms(wc_attribute_taxonomy_name($tax->attribute_name)); 
    } 
} 


$options = array(); 
$options_terms = array(); 
$options[] = "<option value=''>--?--</option>"; 
$options_terms[] = "<option value=''>--?--</option>"; 
foreach ($attribute_taxonomies as $tax) { 
    $options[] = "<option value='{$tax->attribute_name}'>{$tax->attribute_label}</option>"; 
    foreach ($attribute_array as $key) { 
     if ($key == $tax->attribute_name) { 
      foreach ($taxonomy_terms[$key] as $term) { 
       $options_terms[] = "<option value='{$term->name}'>{$term->name}</option>"; 
      } 
     } 
    } 
} 

我能做到這一點的一部分與jQuery?或者我可以鏈接他們與PHP?

EDIT3:

我編輯的選項值的條件選項,以便值對應的屬性名稱

$options_terms[] = "<option value='{$tax->attribute_name}'>{$term->name}</option>"; 

現在我可以以某種方式聯繫他們,如果該值是相同的,不是嗎?

回答

0

沒關係,我創建了一個簡短的代碼,可以完成我所需要的操作,更簡單,沒有這個麻煩:D