wp_restore_post_revision()
云策文档标注
概述
wp_restore_post_revision() 函数用于将文章恢复到指定的修订版本,支持全字段或部分字段恢复。
关键要点
- 参数 $revision 接受修订 ID 或 WP_Post 对象,$fields 可选,指定要恢复的字段,默认为 null 表示恢复所有字段。
- 返回值:成功时返回文章 ID(int),无字段可恢复时返回 false,错误时返回 null。
- 函数内部通过 wp_get_post_revision() 获取修订数据,使用 wp_update_post() 更新文章,并触发 wp_restore_post_revision 钩子。
代码示例
function wp_restore_post_revision( $revision, $fields = null ) {
$revision = wp_get_post_revision( $revision, ARRAY_A );
if ( ! $revision ) {
return $revision;
}
if ( ! is_array( $fields ) ) {
$fields = array_keys( _wp_post_revision_fields( $revision ) );
}
$update = array();
foreach ( array_intersect( array_keys( $revision ), $fields ) as $field ) {
$update[ $field ] = $revision[ $field ];
}
if ( ! $update ) {
return false;
}
$update['ID'] = $revision['post_parent'];
$update = wp_slash( $update ); // Since data is from DB.
$post_id = wp_update_post( $update );
if ( ! $post_id || is_wp_error( $post_id ) ) {
return $post_id;
}
// Update last edit user.
update_post_meta( $post_id, '_edit_last', get_current_user_id() );
/**
* Fires after a post revision has been restored.
*
* @since 2.6.0
*
* @param int $post_id Post ID.
* @param int $revision_id Post revision ID.
*/
do_action( 'wp_restore_post_revision', $post_id, $revision['ID'] );
return $post_id;
}注意事项
- 函数在恢复后会自动更新 _edit_last 元数据以记录最后编辑用户。
- 使用 wp_slash() 处理数据,因为数据来自数据库。
- 相关函数包括 wp_update_post()、update_post_meta()、wp_get_post_revision() 等。
原文内容
Restores a post to the specified revision.
Description
Can restore a past revision using all fields of the post revision, or only selected fields.
Parameters
$revisionint|WP_Postrequired-
Revision ID or revision object.
$fieldsarrayoptional-
What fields to restore from. Defaults to all.
Default:
null
Source
function wp_restore_post_revision( $revision, $fields = null ) {
$revision = wp_get_post_revision( $revision, ARRAY_A );
if ( ! $revision ) {
return $revision;
}
if ( ! is_array( $fields ) ) {
$fields = array_keys( _wp_post_revision_fields( $revision ) );
}
$update = array();
foreach ( array_intersect( array_keys( $revision ), $fields ) as $field ) {
$update[ $field ] = $revision[ $field ];
}
if ( ! $update ) {
return false;
}
$update['ID'] = $revision['post_parent'];
$update = wp_slash( $update ); // Since data is from DB.
$post_id = wp_update_post( $update );
if ( ! $post_id || is_wp_error( $post_id ) ) {
return $post_id;
}
// Update last edit user.
update_post_meta( $post_id, '_edit_last', get_current_user_id() );
/**
* Fires after a post revision has been restored.
*
* @since 2.6.0
*
* @param int $post_id Post ID.
* @param int $revision_id Post revision ID.
*/
do_action( 'wp_restore_post_revision', $post_id, $revision['ID'] );
return $post_id;
}
Hooks
- do_action( ‘wp_restore_post_revision’, int $post_id, int $revision_id )
-
Fires after a post revision has been restored.
Changelog
| Version | Description |
|---|---|
| 2.6.0 | Introduced. |