我正在爲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>";
現在我可以以某種方式聯繫他們,如果該值是相同的,不是嗎?