我们可以谈谈WordPress的修订吗?如何保存WordPress自定义帖子类型的修订版元数据?
今天和其他几天,我已经找了好几个小时了,我找到了一篇关于它的不错的文章,我会在下面引用它。我相信这对很多人都有帮助,主要是因为没有太多关于这个功能以及如何保存元数据字段的修订的内容。不幸的是,WordPress的修订功能似乎在某个时候就被抛在了后面。
我的案例
在我的特殊情况下,我正在创建一个Wiki风格的插件,用于管理自定义帖子类型的信息。除了自定义帖子类型的基本字段(标题、作者、内容、特色图片)之外,我还有一些其他字段需要跟踪版本。
我的尝试
正如我已经提到的,我发现约翰·布莱克伯恩(感谢约翰!)在2012年的一篇文章为我指明了正确的方向。但是,我不能让它发挥作用。我可能错过了什么,也许我对WordPress的修订有误解,也许我只需要睡一觉,它就会在早上出现。谁知道呢,但我真的需要你的帮助。到目前为止,我得到的是:
要保存单个字段的元数据修订,请直接从上面提到的文章:
function my_plugin_save_post( $post_id, $post ) {
if ( $parent_id = wp_is_post_revision( $post_id ) ) {
$parent = get_post( $parent_id );
$my_meta = get_post_meta( $parent->ID, 'my_meta', true );
if ( false !== $my_meta )
add_metadata( 'post', $post_id, 'my_meta', $my_meta );
}
} add_action( 'save_post', 'my_plugin_save_post' );
它看起来很直,对吧?但你猜怎么着,它在if ( $parent_id) {...}
条件下失败了。因为$post_id不是修订版。如果它从来都不是修订版,那么它该如何工作呢?我不明白。我以为钩子"save_post"发送的是当前的$post_id,而不是子版本。我做错了什么?
保存帖子时会触发save_post
挂钩,但它不仅会为实际帖子触发,还会为同时插入的修订触发。
因此,当WordPress将实际帖子保存到数据库时,wp_is_post_revision( $post_id )
将返回false,而当它插入修订时,它将返回true。此时条件语句中的代码将被激发。