在 WooCommerce 产品存档循环中显示 ACF 字段值

时间:2021-03-26 15:01:09

标签: php arrays wordpress woocommerce advanced-custom-fields

我目前正在本地主机上玩,因为我要为拥有唱片店的客户设计电子商务。我已经安装了 Elementor、WooCommerce 和 ACF,起初尝试使用 elementor 自定义皮肤为我的产品创建自定义循环,在那里我很容易地添加了我想要的带有动态数据的字段。 然而,结果证明这是一场噩梦,因为我丢失了排序等内容,并且由于某种原因,添加到购物车按钮的行为很奇怪(单击它后我进入了单个产品页面)。 因此,我放弃了自定义帖子存档,转而使用经典产品存档,这不允许我直接向产品循环添加任何内容。

我尝试在我的functions.php文件中添加此代码(我的自定义字段名为vinyl_genre,它是自定义字段组的一部分):

add_action( 'woocommerce_after_shop_loop_item_title', 'custom_field_display_below_title', 2 );
function custom_field_display_below_title(){
    global $product;

    // Display ACF text
    if( $text = get_field( 'vinyl_genre', $product->get_id() ) ) {
        echo '<p class="archive-genre">' . $text . '</p>';
    }
}

但它没有用,而是在存档中的每个产品标题下方我收到此警告:

警告::[...] 中的数组到字符串转换 \wp-content\themes\hello-theme-child-master\functions.php on line 36 Array

我是 php 的绝对n00b,但我在堆栈中找到了上面的示例,只是更改了字段名称,但无济于事。 有什么建议吗?

-- 编辑 --

使用 print_r($text) 给出一组值(因为黑胶唱片可以有多种流派)

1 个答案:

答案 0 :(得分:1)

这意味着您的自定义字段值是一个包含多个值的数组

改为使用以下内容:

add_action( 'woocommerce_after_shop_loop_item_title', 'custom_field_display_below_title', 2 );
function custom_field_display_below_title(){
    global $product;

    $values = (array) get_field( 'vinyl_genre', $product->get_id() ); // Get custom field values

    // Display custom field values
    if( ! empty($values) ) {
        echo '<p class="archive-genre">' . implode( ', ', $values ) . '</p>';
    }
}

代码位于活动子主题(或活动主题)的functions.php 文件中。它应该可以工作。