通过WooCommerce中的功能显示高级自定义字段

时间:2019-05-23 13:46:51

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

我正在尝试向WooCommerce网站中的单个产品页面添加一系列高级自定义字段值。

此字段是网站管理员会选中的复选框,我希望这些值显示在单个产品页面中。

我已经找到了如何在子主题的functions.php文件中使用此代码显示值的方法:

add_action( 'woocommerce_product_tabs', 'deco_display_acf_field_under_images', 30 );
    function deco_display_acf_field_under_images() {
       echo the_field('cuidados');
    }

“ cuidados”是字段名称。

它可以工作,但是只显示用逗号分隔的值。

现在,我想使用一种更高级的方式来显示值,例如我在ACF文档中找到的用于显示复选框值的示例:

<?php

// vars 
$colors = get_field('colors');


// check
if( $colors ): ?>
    <ul>
    <?php foreach( $colors as $color ): ?>
        <li><?php echo $color; ?></li>
    <?php endforeach; ?>
    </ul>
<?php endif; ?>

我不了解PHP,但是由于语法原因,我知道这对我的functions.php文件不起作用。

您能帮我弄清楚如何实现吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

由于get_field('cuidados')的值是由逗号分隔的值组成的字符串,因此您可以尝试以下操作:

$colors_str = get_field('colors');

if( ! empty($colors_str) ) {

    // Removing the space after the coma (if there is any)
    $colors_str = str_replace(', ', ',', $colors_str);

    // Convert the string as an array
    $colors = explode(',', $colors_str);

    // Html output
    echo '<ul><li>' . implode( '</li><li>', $colors ) . '</li></ul>';
}

它应该可以工作...因此在您的钩子函数中:

add_action( 'woocommerce_product_tabs', 'deco_display_acf_field_under_images', 30 );
function deco_display_acf_field_under_images() {
    global $product;

    $colors_str = get_field('colors', $product->get_id());

    if( ! empty($colors_str) ) {

        // Removing the space after the coma (if there is any
        $colors_str = str_replace(', ', ',', $colors_str);

        // Convert the string as an array
        $colors = explode(',', $colors_str);

        // Html output
        echo '<ul><li>' . implode( '</li><li>', $colors ) . '</li></ul>';
    }
}

代码进入活动子主题(或活动主题)的functions.php文件中。

答案 1 :(得分:0)

尝试

add_action('woocommerce_product_tabs', 'deco_display_acf_field_under_images', 30);

function deco_display_acf_field_under_images() {
// fields MUST be an array in the format array(a,b,c) (or [a,b,c])
$fields = the_field('cuidados');
if (is_string($fields)) $fields = explode(",", $fields);

// check
if ($fields): ?>
    <ul>
        <?php foreach ($fields as $field): ?>
            <li><?php echo $field; ?></li>
        <?php endforeach; ?>
    </ul>
<?php endif; 
}