Wordpress获取所有属性和值

时间:2015-11-30 14:14:21

标签: wordpress woocommerce

实际上我在产品中有自定义属性,在此之后创建搜索这些属性,我尝试显示所有属性和值,但最后没有得到

例如,实际上我有一个名为colors的属性,在这个属性中我有不同的值,红色,绿色黄色,蓝色

为了显示属性及其值,我使用此代码:

    <?php    global $product;
$terms=get_terms('pa_colors');
print "<select>";
foreach ($terms as $each_term) {
echo '<option>'.$each_term->name.'</option>';
} 
print "</select>"; ?>

案例是这个功能只显示我2种颜色而没有剩下的颜色,我在woocommerce后端看到我只有2个产品并且这些颜色用这个功能显示,但没有其他颜色, case它在woocommerce的后端属性我可以看到所有属性和颜色,我想要显示与后端相同但在前面,但是这个函数不让我显示这个属性的所有值,称为颜色。

如何仅使用来自属性的2种颜色,只显示这两种颜色,但不显示其他颜色。

我的问题是,如何从前面的一个属性中显示所有颜色或所有值?

The result must be this :

<select>
<option>Red</option>
<option>Green</option>
<option>Yellow</option>
<option>Blue</option>
</select>

感谢您的帮助。此致

3 个答案:

答案 0 :(得分:2)

使用get_terms()时,WordPress会过滤掉未附加到已发布帖子的字词(而WooCommerce会将您的产品存储为帖子)。幸运的是,WordPress将允许您防止这种情况发生。请尝试以下方法:

$options = array('hide_empty' => false);

$terms = get_terms('pa_colors', $options);

在codex中解释了许多其他选项:https://codex.wordpress.org/Function_Reference/get_terms

答案 1 :(得分:0)

使用此SQL查询获取包含详细信息的所有属性

    global $wpdb;

    $attribute_taxonomies = $wpdb->get_results( "SELECT * FROM " . $wpdb->prefix . "woocommerce_attribute_taxonomies WHERE attribute_name != '' ORDER BY attribute_name ASC;" );
    set_transient( 'wc_attribute_taxonomies', $attribute_taxonomies );

    $attribute_taxonomies = array_filter( $attribute_taxonomies  ) ;

    prin_r($attribute_taxonomies);

答案 2 :(得分:0)

<强>尝试:

function GetProductAllParamsById($_idProduct = null) {

   if ( func_num_args() > 0 ) {

        $result = Array();
        $productAllAttr = get_post_meta( $_idProduct, '_product_attributes' );
        foreach ($productAllAttr as $value) {

            while (count($value) > 0) {

                $_instValue = array_pop($value);
                $_nameParam = $_instValue['name'];
                $_nameProductAttr = wc_get_product_terms( $_idProduct, $_nameParam, array( 'fields' => 'names' ) ); 

                array_push($result, [$_nameParam => $_nameProductAttr]);

            }

        }  

    }

    return isset($result) ? $result : null;
}

示例:

echo "<pre>";
echo print_r( GetProductAllParamsById($id_product) );
echo "</pre>";

<强>返回

Array (
    [0] => Array
        (
            [pa_colors] => Array
                (
                    [0] => Blue
                )

        )

    [1] => Array
        (
            [pa_customer] => Array
                (
                    [0] => someparam
                    [1] => sometwoparam
                )

        )

)