Support

Account

Home Forums General Issues acf if query problem

Solved

acf if query problem

  • hello everyone, I’m new here =) 👋

    For example, I would like to create a color picker.

    A material is available, for example, in the colors: black and white.

    I have now created a checkbox with the corresponding values.

    If these are now selected, then I would like to spend instead of the values a color code in the box.

    So: I have a material that comes in different colors.
    Material 1 = blue, yellow, black
    Material 2 = black, white
    I have now created an acf checkbox with the colors (black, white, blue, yellow, etc)
    In the article material 1 I see now all colors as checkbox. that’s right. Here I select the 3 colors that are available.
    in the frontend these colors are also displayed as text. I would like to replace these with small boxes.
    So with black is then “<div style=”float: left; width: 10px; height: 10px; margin-right: 3px; border: 1px solid #000000; background-color: #1E1E1E” title=”Schwarz”></div>”
    the only problem now is that with this code all colors are displayed and not only those that are available.

    
    
    <?php $field = get_field_object('3DMaterialien');
    			if( $field['farben'] != 'Schwarz'): ?>
    					<div style="float: left; width: 10px; height: 10px; margin-right: 3px; border: 1px solid #000000; background-color: #1E1E1E" title="Schwarz"></div>
    			<?php endif; ?>
              	<?php $field = get_field_object('3DMaterialien');
    			if( $field['farben'] != 'Blau'): ?>
                      <div style="float: left; width: 10px; height: 10px; margin-right: 3px; border: 1px solid #000000; background-color: #3072B5" title="Blau"></div>
    			<?php endif; ?>
    

    however, with this code, everything is displayed always and everywhere. I think that would have to be changed.

    Can anyone help me ?

  • There isn’t any way to tell what you’re trying to do, for example, I have no idea what you’re attempting to do here or why

    
    if( $field['farben'] != 'Schwarz'): ?>
    

    $field as returned by ACF has no index named “farben”

    Nor do I understand why you are using get_field_object() instead of get_field()

    The only thing I can really do is tell you how I’d set this up.

    First I would create a checkbox field. The choices for this field would look something like this

    
    #FF0000 : Red
    #00FF00 : Grean
    #0000FF : Blue
    

    I would set the return value of this field to “Both (Array)”

    Then, in my template I would do this, I’m only adding what would be needed for using the values returned.

    
    $colors = get_field('name_of_color_field_here');
    if ($colors) {
      foreach ($colors as $color) {
        ?><div style="background-color: <?php
              echo $color['value']; ?> title=<?php 
              echo $color['label']; ?>></div><?php 
      }
    }
    
  • Impressive! I think that will get me much further.
    but somewhere you have to have made a mistake.
    maybe you forgot a quotation mark? (“) or too much?

    what I have already managed is that the “color codes” are displayed. but only with “#”.
    So not: #ffffff, just #
    (but at least only as many as colors are available for the material)

    my current code looks like this:

    
    				<?php
    $colors = get_field('farben');
    if( $colors ): ?>
    
        <?php foreach( $colors as $color ): ?>
            <div style="background-color:<?php echo $color['value']; ?>"><?php echo $color['label']; ?></div>
        <?php endforeach; ?>
    
    <?php endif; ?>	
    

    I would like to have the colors shown in small boxes.

  • edit: I’ve got it, that the individual boxes of the colors are displayed. However, these are now empty …. do we have to work with an array here?

    
            <?php
    $colors = get_field('farben');
    if( $colors ): ?>
        <?php foreach( $colors as $color ): ?>
            <div style="float: left; width: 10px; height: 10px; margin-right: 3px; border: 1px solid #000000; background-colo:-<?php echo $color['value']; ?>"></div>
        <?php endforeach; ?>
    <?php endif; ?> 
    

    https://ibb.co/txy4jh2

  • I missed some “s in my code, typed it here and there’s not syntax checking. It should have been

    
    $colors = get_field('name_of_color_field_here');
    if ($colors) {
      foreach ($colors as $color) {
        ?><div style="background-color: <?php
              echo $color['value']; ?>" title="<?php 
              echo $color['label']; ?>"></div><?php 
      }
    }
    
  • nearly…. 😀

    I once looked at the console and found that as a color code only one “#” is output …. without, for example, ffffff

  • `<?php
    $field = get_field_object(‘farben’);
    $colors = $field[‘value’];
    if( $colors ): ?>
    <?php foreach( $colors as $color ): ?>
    <div style=”float: left; width: 10px; height: 10px; margin-right: 3px; border: 1px solid #000000; background-color:<?php echo $color; ?>”></div>
    <?php endforeach; ?>
    <?php endif; ?>`

    This works!
    Thank You!

Viewing 7 posts - 1 through 7 (of 7 total)

You must be logged in to reply to this topic.

We use cookies to offer you a better browsing experience, analyze site traffic and personalize content. Read about how we use cookies and how you can control them in our Cookie Policy. If you continue to use this site, you consent to our use of cookies.