使用默认值将 post_meta 值存储在变量中的最佳方法是什么?

What's the best way to store post_meta value in variable, with a default value?

在变量中存储 post_meta 值以及在 meta_key 不存在时存储默认值的最有效和最简单的方法是什么?

我想用这样的东西,meta_value 永远是一个数字:

$bv_faq_thumbs_up = isset(get_post_meta($post->ID, '_bv_faq_thumbs_up', true)) ? get_post_meta($post->ID, '_bv_faq_thumbs_up', true) : 0;

但这会引发 PHP 错误:

Fatal error: Cannot use isset() on the result of an expression

在我的脑海中,我唯一能想到的是:

if(get_post_meta($post->ID, '_bv_faq_thumbs_up', true) === null) {
    $bv_faq_thumbs_up = 0;
} else {
    $bv_faq_thumbs_up = get_post_meta($post->ID, '_bv_faq_thumbs_up', true);
}

但是这样看起来比较啰嗦和臃肿,这样的做法对吗(速度效率和整洁度)

试试这个代码;

$bv_faq_thumbs_up = get_post_meta($post->ID, '_bv_faq_thumbs_up', true);

if(empty($bv_faq_thumbs_up)) {
    $bv_faq_thumbs_up = 0;
}

$bv_faq_thumbs_up = get_post_meta($post->ID, '_bv_faq_thumbs_up', true);

$bv_faq_thumbs_up = (!empty($bv_faq_thumbs_up)) ? $bv_faq_thumbs_up : 0;

if(metadata_exists( 'post', $post->ID, '_bv_faq_thumbs_up' ) === null) {
    $bv_faq_thumbs_up = 0;
} else {
    $bv_faq_thumbs_up = get_post_meta($post->ID, '_bv_faq_thumbs_up', true);
}

对于未来的用户

根据 Stender 的评论,我发现使用 metadata_exists 而不是 isset 可以实现相同的想法,仍然包含在一个句子中,并且只使用一次 get_post_meta() 函数, 同时设置默认值。

$bv_faq_thumbs_up = metadata_exists('post', $post->ID, '_bv_faq_thumbs_up') ? get_post_meta($post->ID, '_bv_faq_thumbs_up', true) : 0;

你可以这样做,因为 PHP 7:

$result = get_post_meta($id, $key, true) ?? false; // false is default value

选择:

if (($result = get_post_meta($id, $key, true) ?? false) !== false) {
    // do stuff but only if the $key exists
    echo $result;
}

无需调用 metadata_exists() 或 get_post_meta() 两次。解释 ??可以在这里找到 https://www.phptutorial.net/php-tutorial/php-null-coalescing-operator/