Hide custom field if empty

时间:2020-04-10 作者:HAL2020

我在自定义帖子类型的单个页面上显示自定义分类法中的值。

我有一个自定义的帖子类型“artwork”,分类为“artists”。如何在单个帖子页面上显示艺术家姓名(如果为帖子分配了多个艺术家,则显示多个艺术家姓名)。如果没有为帖子指定艺术家,则页面上不会显示任何艺术家。这很好用。

<?PHP //  ARTIST(s) attached to Artwork

    $artists = get_the_terms( get_the_ID(), \'artists\' );
    $artistsArray = array();

    if( ! empty( $artists ) ) : 
        echo "<div>Artist: <strong>";
        foreach ( $artists as $artist ){ 
            $artistsArray[] = \'<span><a href="/artists/\'.ucfirst($artist->slug).\'">\'.ucfirst($artist->name).\'</a></span>\';
        }
        echo implode( \', \', $artistsArray );
        echo "</strong><div>";  
    endif; ?>
在我的艺术家分类法中,我有一个自定义字段“艺术家instagram”。在下面的一篇博文中,我有一个链接指向这位艺术家的instagram账户。

<?php
    $artistigs = get_the_terms( get_the_ID(), \'artists\' );
    if( ! empty( $artistigs ) ) : ?>    
    <?php foreach( $artistigs as $artistig ) : ?>                   
        <div><i class="fab fa-instagram"></i> <strong><a href="https://instagram.com/<?php the_field(\'artist-instagram\', $artistig); ?>" target="_blank">@<?php the_field(\'artist-instagram\', $artistig); ?></a></strong></div>
    <?php endforeach; 
    endif;
?>
链接显示正确。但当一个艺术家没有instagram时,我想把它藏起来。我正在使用if( ! empty() ), 但如果艺术家的instagram字段为空,它仍会显示链接。为什么?

谢谢你的帮助!

编辑更新:

使用此代码,Instagram链接仅显示在分配给具有IG链接(根据需要)的艺术家的帖子上。问题:它只输出$artistig 以及foreach忽略(例如,测试文本未输出)。

<?php 
    $artists = get_the_terms( get_the_ID(), \'artists\' );
    if( !empty( $artists ) ) :  
        foreach( $artists as $artist ) :        
            $artistig = the_field( \'artist-instagram\', $artist );
            if( !empty( $artistig ) ) : 
                echo "IG User TEST: ". var_dump( $artistig ) ." END TEST";
            endif;      
        endforeach;
    endif; 
?>

1 个回复
最合适的回答,由SO网友:Tony Djukic 整理而成

你不是在检查艺术家的instagram字段是否为空,而是在检查“艺术家”一词是否为空,而事实并非如此。

<?php
    $artistigs = get_the_terms( get_the_ID(), \'artists\' );
    if( ! empty( $artistigs ) ) : ?>
         //This will execute if the artist term is not empty
    endif;
?>
我自己不使用ACF,所以不能百分之百确定the_field() 可以,但请尝试以下操作:

<?php
    $artists = get_the_terms( get_the_ID(), \'artists\' );
    if( !empty( $artists ) ) : ?>    
    <?php foreach( $artists as $artist ) :
        $artistig = get_field( \'artist-instagram\', $artist );
        if( !empty( $artistig ) ) :
            echo \'<div>\';
                echo \'<i class="fab fa-instagram"></i> <strong><a href="https://instagram.com/\' . $artistig . \'" target="_blank">@\' . $artistig . \'</a></strong>\';
            echo \'</div>\';
        endif;
   endforeach; 
  endif;
?>
================

UPDATE

要解决您的更新,请var_dump() 真的会弄乱格式,所以让我们删除它。

<?php 
    $artists = get_the_terms( get_the_ID(), \'artists\' );
    if( !empty( $artists ) ) :  
        foreach( $artists as $artist ) :        
            $artistig = get_field( \'artist-instagram\', $artist );
            if( !empty( $artistig ) ) : 
                echo \'IG User TEST: \'. $artistig .\' END TEST\';
            endif;      
        endforeach;
    endif; 
?>

相关推荐

Wp_Term_Taxonomy.Parent引用了什么?

我最初的想法是,它引用了另一种分类法(即wp_term_taxonomy.parent 到wp_term_taxonomy.term_taxonomy_id). Corcel这样的怪物built under this assumption. 然而,我done some digging 大多数信息似乎表明它实际上引用了wp_terms.term_id. 在Corcel的案例中,我认为这种巧合是可行的——WordPress将设置term_id 以及term_taxonomy_id 到相同的值。如果您弄乱了数据