Отображать расширенные настраиваемые поля с помощью функций в WooCommerce - PullRequest
1 голос
/ 23 мая 2019

Я пытаюсь добавить массив значений расширенных пользовательских полей на страницу отдельного продукта на веб-сайте 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 ]

1 голос
/ 23 мая 2019

Поскольку значение 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 вашей активной дочерней темы (или активной темы).

0 голосов
/ 23 мая 2019

Попробуйте

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; 
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...