Hide custom fields when empty

时间:2012-10-08 作者:Marja

我试图创建一个函数,在条目标题后添加来自两个自定义字段的数据。填写这些字段时,我可以正确显示它。这些字段是图像源url和图像必须链接到的url。

问题是,即使自定义字段为空,它也会占用空间。我的php技能还不足以解决如何改变这一点。我添加了一个检查,但现在字段不再显示。

希望有人能帮我解决这个问题。到目前为止,我得到的是:

//Add custom field image after entry title
function headway_title_button()
{
    $check = get_post_meta($post->ID, \'titel_knop\');
    if( !empty( $check[""] ) )
    {
        return printf(
            \'<div class="title-btn"><a href="%s" alt="%s"><img src="%s" /></a></div>\'
            ,get_post_meta( get_the_ID(), \'titel_knop_url\', true )
            ,get_the_title()
            ,get_post_meta( get_the_ID(), \'titel_knop\', true )
        );  
    }
    else
    {
        return printf(\'<div style="display:none"></div>\');
    }
}

add_action( \'headway_after_entry_title\', \'headway_title_button\' );

2 个回复
最合适的回答,由SO网友:ndm 整理而成

有几个问题会破坏您的代码:

  • $post 不存在,您需要使用global, 或者简单地使用get_the_ID 就像你已经在做的那样$check[\'\'] 不会返回任何内容,因为它将访问empty 构建它会触发警告,我现在无法测试它,但至少在语法方面应该可以工作(根据API文档,理论上也是在功能方面):

    function headway_title_button()
    {
        $post_id = get_the_ID();
    
        if(metadata_exists(\'post\', $post_id, \'titel_knop\'))
        {
            printf(
                \'<div class="title-btn"><a href="%s" alt="%s"><img src="%s" /></a></div>\',
                get_post_meta($post_id, \'titel_knop_url\', true)
                get_the_title(),
                get_post_meta($post_id, \'titel_knop\', true)
            );  
        }
    }
    
    然而,一次获取所有元数据可能更有效。但是WordPress不够聪明,无法在不请求单个值的情况下取消序列化,因此您需要自己完成(如果有必要,则取决于元数据):

    function headway_title_button()
    {
        $meta = get_post_meta(get_the_ID());
    
        if(!empty($meta[\'titel_knop\'][0]))
        {
            printf(
                \'<div class="title-btn"><a href="%s" alt="%s"><img src="%s" /></a></div>\',
                maybe_unserialize($meta[\'titel_knop_url\'][0]),
                get_the_title(),
                maybe_unserialize($meta[\'titel_knop\'][0])
            );  
        }
    }
    

SO网友:Adam

改变

if( !empty( $check[""] ) )
收件人:,

if( $check != \'\' )
全部,

//Add custom field image after entry title
function headway_title_button()
{
    $check = get_post_meta($post->ID, \'titel_knop\', true);
    if( $check != \'\' )
    {
        return printf(
            \'<div class="title-btn"><a href="%s" alt="%s"><img src="%s" /></a></div>\'
            ,get_post_meta( get_the_ID(), \'titel_knop_url\', true )
            ,get_the_title()
            ,get_post_meta( get_the_ID(), \'titel_knop\', true )
        );  
    }
    else
    {
        return printf(\'<div style="display:none"></div>\');
    }
}

add_action( \'headway_after_entry_title\', \'headway_title_button\' );
备注您也可以这样做,

if( !empty( $check ) )
但请注意,如果自定义字段碰巧包含,

0(0为整数)0.0(0为浮点)0(0为字符串)条件!empty() 将评估为FALSE, 这意味着在使用PHP的empty() 作用

虽然它完全可以接受使用,但了解它是如何评估值的是值得的。

还有isset() 可以以同样的方式使用,

if ( isset ( $check ) )
但在isset() 其行为各不相同。然而,这也是完全可以接受的$check != \'\' 是我在这种情况下的建议。

结束

相关推荐

Functions.php Problem

当我在函数顶部添加第3-19行时。php,然后尝试更新图像。phpI get the error \"Warning: Cannot modify header information - headers already sent\" when I try to update my image.php.第3-19行的代码为“我的图像库”创建自定义的下一个/上一个链接,并将最后一个链接重定向到“更多库”页面。我的代码可以在这里看到:http://pastebin.com/Yen04t2z