我最近不得不对我的wp_posts
来自WordPress插件的表。我第一次试着用wp_update_post()
, 认为这样做就行了。显然地wp_update_post()
is only able to edit a predefined set of table fields (可能是WP默认值)。然后我偶然发现$wpdb
班我想我读到了wp_update_post()
使用$wpdb
这很有趣,但也引出了一个问题,为什么wp_update_post()
当您可以使用$wpdb
直接上课?什么是wp_update_post()
这样做$wpdb
不是吗?它需要填充什么?或者,这更像是一个管理问题,比如资源或安全问题?如果是这样的话,那么直接使用$wpdb的缺点是什么?
Wp_UPDATE_POST()做了什么$wpdb类不能做的事情?
wp_update_post()
调用一些钩子$wpdb
不是靠自己。你必须自己做才能与其他插件兼容。wp_update_post()
调用一些与数据库条目卫生、缩略图、附件、时间(格式、区域等)、注释、分类、元、缓存等相关的函数$wpdb
, 确保适当地处理所有这些问题。WordPress将更新
wp_update_post()
始终使其与数据库、核心代码、插件支持等的当前状态保持兼容。即使您做得一切正常,未来的更新也将很困难$wpdb
.所以如果可以
wp_update_post()
, 然后始终使用它,仅使用$wpdb
如果你想要的与更新帖子相关的操作不能用它来完成。
当您可以只使用WPDB时,为什么要使用WP\\u Query()?
其思想是,这些函数使基于关键字提取数据更容易、更快,而不是写出SQL查询。函数本身将生成必要的SQL来提取所需的数据,这反过来又会加快开发速度。
参考问题关于wp_update_post()
and predefined fields 讨论以下两个字段:not 默认WordPress安装的一部分group_access
和tag_list
. 这个wp_update_post()
函数将命中所有built-in fields很好。
的缺点$wpdb
您确实需要了解SQL,并且需要意识到正常的数据清理和何时使用prepare()
还有哪些功能已经准备好了你的陈述,而这些几乎都不是缺点。这个$wpdb
类本质上比任何默认WordPress函数都更强大,因为假设您知道获取、修改或删除数据的正确SQL,那么您可以访问所有数据,无论是否自定义。
TL;DR $wpdb
更强大,但不那么友好和宽容。
大多数API函数都附带了操作和过滤器。其他插件或主题可能有附加到这些操作的代码,这些代码在您直接添加/更新表时不会触发。
例如,缓存插件服务于缓存中的页面,并且仅在更新帖子时刷新缓存。直接更新post数据,缓存将继续为旧版本服务,因为没有任何内容触发刷新操作。