存储自定义帖子类型的元数据很容易,只需使用处理此操作的方法添加“save\\u post”操作即可。在其中,对于要存储的字段,您有如下内容(当然还有通常的安全检查):
update_post_meta( $post_id, \'_description\', $_POST[\'_description\'] );
很简单。然而,我不知道我需要做什么,以便WordPress存储自定义帖子的修订。
我为自定义帖子类型启用了修订,并为“title”等标准字段启用了修订。但默认情况下,它不适用于元数据。
我一直在寻找其他人是如何做到这一点的,几乎所有人都给出了以下代码片段:
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( \'my_custom_post\', $post_id, \'my_meta\', $my_meta );
}
} add_action( \'save_post\', \'my_plugin_save_post\' );
但这对我不起作用。当我更改其中一个元数据字段时,在修订列表中看不到新修订。例如,当我更改自定义帖子的标题时,我确实看到了新的修订。
与我通常存储元数据的方式相比,我对如何实现这一点的一些细节不太熟悉(可能是因为不熟悉API的这一部分或数据结构)。或者我因为感冒错过了什么。
有谁能举一个好例子,说明您需要如何存储自定义帖子元数据的修订?
SO网友:phatskat
您可以(但不应该)访问一个私有筛选器:
Defined in wp-includes/revision.php:
/**
* Filter the list of fields saved in post revisions.
*
* Included by default: \'post_title\', \'post_content\' and \'post_excerpt\'.
*
* Disallowed fields: \'ID\', \'post_name\', \'post_parent\', \'post_date\',
* \'post_date_gmt\', \'post_status\', \'post_type\', \'comment_count\',
* and \'post_author\'.
*
* @since 2.6.0
* @since 4.5.0 The `$post` parameter was added.
*
* @param array $fields List of fields to revision. Contains \'post_title\',
* \'post_content\', and \'post_excerpt\' by default.
* @param array $post A post array being processed for insertion as a post revision.
*/
$fields = apply_filters( \'_wp_post_revision_fields\', $fields, $post );
所以你可以写一个函数
add_filter( \'_wp_post_revision_fields\', \'add_my_own_fields\', 10, 2 );
function add_my_own_fields( $fields, $post ) {
$fields[\'meta_field\'] = \'Meta Field\';
}
在哪里
meta_field
是您想要修改的元的关键,并且
\'Meta Field\'
是在修订UI中显示为标题的内容。
Please 注意,这是私有的,它的用途是not 面向主题或插件开发人员。需要更详细的解决方案来避免这个问题,如果有一个插件也能处理这些问题,你可能会过得更好。