如何为每个类别名称指定自己的ACF背景颜色?

时间:2020-08-17 作者:Ben

我正在构建一个webshop,并开始在商店归档页面上配置产品循环。我会显示与每个产品相关的产品类别,并且我想设置这些类别,以获得我在管理页面上选择的背景。

我制作了一个ACF颜色选择器字段,并设置了颜色。

这是我的代码:

add_action( \'woocommerce_shop_loop_item_title\', \'VS_woo_loop_product_title\', 10 );
function VS_woo_loop_product_title() {
    echo \'<h3>\' . get_the_title() . \'</h3>\';
    $terms = get_the_terms( $post->ID, \'product_cat\' );
    if ( $terms && ! is_wp_error( $terms ) ) :
    //only displayed if the product has at least one category
        $cat_links = array();
        foreach ( $terms as $term ) {
            $cat_links[] = $term->name;
        }
        $on_cat = join( " ", $cat_links );
        ?>
        <div style="background: <?php the_field(\'kollekcio_szine\', $terms); ?>">
            <?php echo $on_cat; ?>
        </div>
    <?php endif;
} 
它根本不起作用。类别显示正确,但背景色不显示。如果我检查元素,我会看到background属性为空。

我应该如何修改代码以使其正常工作?

谢谢你的帮助!

3 个回复
最合适的回答,由SO网友:Saulo Padilha 整理而成

获取自定义分类法的ACF字段的语法为:

$var = get_field(\'name_of_acf_field\', \'name_of_taxonomy\' . \'_\' . taxonomy_ID);
因此,在您的情况下,您需要先获取product\\u cat ID,然后执行以下操作:

add_action( \'woocommerce_shop_loop_item_title\', \'VS_woo_loop_product_title\', 10 );
function VS_woo_loop_product_title() {
    echo \'<h3>\' . get_the_title() . \'</h3>\';
    $terms = get_the_terms( $post->ID, \'product_cat\' );
    if ( $terms && ! is_wp_error( $terms ) ) :
    //only displayed if the product has at least one category
        $cat_links = array();
        foreach ( $terms as $term ) {
            $cat_links[] = $term->name;
            $cat_id = $term->term_id;
        }

        $on_cat = join( " ", $cat_links );
        $bgcolor = get_field(\'kollekcio_szine\', \'product_cat\' . \'_\' . $cat_id);

        ?>
        <div style="background-color: <?php echo $bgcolor; ?>">
            <?php echo $on_cat; ?>
        </div>
    <?php endif;
}

SO网友:Sam

要从您的类别中获取ACF数据,您需要执行以下操作:

我的代码示例:(此代码是我的项目示例,它不是WooCommerce和ACF的混合。它是ACF和自定义开发的混合。)

....
foreach ($products_cats as $cat) {
    $term = get_term($cat->id, \'products_cats\');

    $term_img = get_field(\'image_present\', $term->taxonomy . \'_\' . $term->term_id);
}
....
对不起,我的英语不好,希望这对你有帮助!

SO网友:t2pe

如果我读得正确,那么变量$terms是一个数组,位于您在\\u字段中使用它的位置。我想你需要它是一个单独的类别ID。我不认为函数the\\u field()接受数组。。。我首先将原始数据打印到屏幕上,看看它是否会给您任何错误输出:

<?php var_dump(the_field(\'kollekcio_szine\', $terms)); ?>
或类似的原始输出方法。。。

如果您可以仅确定要应用样式的单个类别,则可以在上面使用该类别。

相关推荐

Dynamic CPT / Taxonomy

我在我的网站上使用了多个CPT/分类法/术语。目前,为了定制和使用好的WP模板,我做了一个taxonomy-$taxonomy.php 每个CPT的文件。但事实上,在我的模板中,只有CPT和分类词是不同的。是否存在使其动态化的解决方案?UPDATED QUESTION我所说的动态是指:只能使用taxonomy.php 模板而不是taxonomy-$taxonomy.php 模板,并具有\'post_type => \'$post_type\' 和\'taxonomy\' => \'$taxon