首页 文章

Woocommerce链接属性和术语

提问于
浏览
0

我正在为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 我都会得到相应的条款 . 但这些是不同的阵列 . 第一个是一个简单的数组,我认为第二个是多维数组 .

有没有办法检查第一个中的attribute_name是否与第二个中的key匹配,然后我只需要从第二个数组中获取值 . 这听起来很复杂......

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>";

现在我可以以某种方式链接它们,如果值相同,不是吗?

1 回答

  • 0

    没关系,我创建了一个短代码,可以做到我需要的,更简单,没有这个麻烦:D

相关问题