“UPDATE_POST_META”是否在更新前检查值是否相同?

时间:2018-11-04 作者:Sablednah

运行以下代码时:

update_post_meta( 1, \'_visibility\', \'visible\' );
wordpress是否检查post\\u id1 钥匙_visable 值为visible 在写入数据库之前?

我有一个导入脚本,我想知道这是否可以节省处理时间。

function update_post_meta_check($post_id, $key, $value) {
        $old = get_post_meta($post_id, $key);
        if ($old == $value) {
                return false;
        } else {
            return update_post_meta($post_id, $key, $value);
        }
}
或者Wordpress已经自己做了这个检查?

作为参考,我希望我的许多博文元保持不变-所以额外的get_post_meta 如果我能做很多就可以了update_post_meta\'s

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

update_post_meta() 使用update_metadata() 更新帖子元数据,如果调用update_post_meta() 不指定第四个参数(即。$prev_value) —或者该值为空,那么是的,update_metadata() 将检查新值是否与数据库中的当前值相同,如果相同,元数据将不会更新。

您可以检查lines #195 to #202update_metadata() 相关代码的源代码。

更新:在下面添加注释;在“附加注释”部分上方添加注释。)

即使您指定$prev_value (并将其设置为非空值),如果$prev_value 等于new 值:

// Returns FALSE if current database value is \'hidden\'...
update_post_meta( 123, \'_visibility\', \'hidden\', \'hidden\' );
附加说明:更新元数据(如果存在);否则,不要创建新的update_post_meta() / update_metadata() 如果在数据库中找不到现有条目,将自动添加元数据。因此,如果您不希望发生这种情况,可以使用metadata_exists() 防止自动创建元数据;例如:

// 123 is the post ID.
if ( metadata_exists( \'post\', 123, \'_visibility\' ) ) {
    update_post_meta( 123, \'_visibility\', \'hidden\' );
}

结束

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在