使用默认值将 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/
在变量中存储 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/