ACF получает метку поля в пользовательском коде


У меня есть некоторый пользовательский код для отображения моих пользовательских полей так, как я хочу.

К сожалению, с помощью этого кода я, похоже, не могу получить доступ к $field['label']. Я пробовал разные способы, но на самом деле не знаю, как этого добиться.

<?php
    $fields = get_fields();
    if( $fields ): ?>
        <ul>
        <?php
            foreach( $fields as $name => $value ):
                if (stripos($name, 'isbn') !== false) : ?>
                    <li><b><?php echo $name['label']; ?></b> <?php echo $value; ?></li>
                <?php endif;
            endforeach; ?>
        </ul>
    <?php endif; ?>
Author: Fayaz, 2018-07-25

1 answers

Попробуйте это, что сработало для меня:

<?php
    $fields = get_field_objects(); // I changed from get_fields()
    if( $fields ): ?>
        <ul>
        <?php
            // I changed $value to $field (i.e. the variable name)
            foreach( $fields as $name => $field ):
                if (stripos($name, 'isbn') !== false) : ?>
                    <li><b><?php echo $field['label']; ?></b> <?php echo $field['value']; ?></li>
                <?php endif;
            endforeach; ?>
        </ul>
    <?php endif; ?>

Таким образом, ссылаясь на $field в коде, $field['label'] - это метка поля (например, "Книга ISBN"), а $field['value'] - значение поля. Обратите внимание, однако, что значение поля может быть array, поэтому просто echo- это (скорее всего, выдаст предупреждение PHP и) даст вам "Массив".

См. https://www.advancedcustomfields.com/resources/get_field_objects / если вам нужна помощь с функцией get_field_objects().

PS: Если вы только хотите получить метку одного поля, а не всех полей (текущей/целевой записи/пользователя/и т.д.), вы можете использовать get_field_object() вместо этого.

 1
Author: Sally CJ, 2018-07-25 13:50:32