Php 链接属性和术语的方法
我正在为woocommerce创建一个搜索表单,这样我就可以选择从属性中提取的一些选项,然后当我提交时,我将得到一个精致的产品选择。我已经为属性创建了一个选择,但无法从特定属性中获取术语。我如何将这两者联系起来Php 链接属性和术语的方法,php,wordpress,forms,woocommerce,Php,Wordpress,Forms,Woocommerce,我正在为woocommerce创建一个搜索表单,这样我就可以选择从属性中提取的一些选项,然后当我提交时,我将得到一个精致的产品选择。我已经为属性创建了一个选择,但无法从特定属性中获取术语。我如何将这两者联系起来 global $woocommerce, $post, $product; $class = ' dnd_service_box_' . $class; $attribute_array = array(); $attribute_taxonomies = w
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;
如何访问这些分类法中的所有术语,以及如何使其在我选择一个类似年份时,在另一个选择中,我将只看到“年份”属性中的术语
编辑:
我添加了另一个代码,它将为我提供术语
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_分类法生成了这种数组:
Array
(
[0] => stdClass Object
(
[attribute_id] => 2
[attribute_name] => product-year
[attribute_label] => Year
[attribute_type] => select
[attribute_orderby] => menu_order
) ...
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
(
从中我可以得到所有的名字和标签。$taxonomy\u术语将为mi提供这种数组:
Array
(
[0] => stdClass Object
(
[attribute_id] => 2
[attribute_name] => product-year
[attribute_label] => Year
[attribute_type] => select
[attribute_orderby] => menu_order
) ...
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
(
对于每个属性名,我得到了相应的术语。但这些是不同的数组。第一个是简单数组,第二个是多维数组
是否有一种方法可以检查第一个数组中的属性_名称是否与第二个数组中的键匹配,然后我只需要从第二个数组中获取值。这听起来很复杂
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链接它们吗
编辑3:
我编辑了术语选项的选项值,以便该值与属性名称相对应
$options_terms[] = "<option value='{$tax->attribute_name}'>{$term->name}</option>";
现在,如果值相同,我可以以某种方式将它们链接起来,不是吗?没关系,我创建了一个快捷码,它可以实现我需要的功能,更简单,而且没有这个麻烦:D