在检索用户之前,您需要“保存”保存元数据的用户的信息。。。WordPress不存储这些信息,您无法获取不存在的信息。
保存所有元键的信息非常困难,WP在内部使用了很多自定义字段,因此您可能需要选择保存作者信息的元键。
WordPress有一个钩子“added\\u post\\u meta”,每次添加自定义字段时都会触发该钩子if 它是使用内置函数添加的:add_post_meta
或update_post_meta
.
你可以利用这个钩子来保存作者信息
function who_save_what( $mid, $pid, $key, $value ) {
// arrays of meta fields to save
// array keys are the meta keys, values is array of post types
$to_save = array(
\'1_rep\' => array( \'workout\' ),
\'_thumbnail_id\' => array( \'post\', \'page\', \'workout\' ) // just an example
);
// check key
if ( ! array_key_exists( $key, $to_save ) ) return;
// check post type
$post = get_post( $pid );
if ( ! in_array( $post->post_type, $to_save[$key] ) ) return;
// check user
if ( ! ( $uid = get_current_user_id() ) ) return;
// ok, let\'s save
remove_filter( current_filter(), __FUNCTION__ ); // avoid recursion
$who = get_post_meta( $pid, "_who_save_{$key}");
if ( empty($who) ) $who = array();
$who[] = array( $mid => $uid );
$done = update_post_meta( $pid, "_who_save_{$key}", $who );
add_filter( current_filter(), __FUNCTION__ ); // restore filter
return $done;
}
add_action( \'added_post_meta\', \'who_save_what\', 20, 4 );
此函数用于保存使用另一个元字段保存特定元字段的用户数组:
"_who_save_{$key}"
哪里
$key
是自定义字段键(例如。
"_who_save_1_rep"
).
此键的值是用户ID的数组,其中数组键是元ID(meta_id
在里面postmeta
表)。保存一个用户数组的原因是,您可以有多个具有相同元键的字段,这样您就可以知道哪个用户保存了哪些特定字段。
下面是一个如何显示添加了元键的用户的示例,例如*\'1\\u rep\'*:
echo \'<p>The "1_rep" key for post \' . $postid . \' was saved by\';
$info = get_post_meta( $postid, \'_who_save_1_rep\', true );
$users = array();
foreach ( $info as $metaid => $userid ) {
$user = new WP_User( $userid );
if ( ! $user->exists() ) continue; // users can be deleted...
$users[] = $user->display_name;
}
if ( empty( $users ) ) {
echo \' someone that said us goodbye.</p>\';
} else {
echo \'</p><ul><li>\' . implode( \'</li><li>\', $users ) . \'</li></ul>\';
}
如果您的元键是单个的,即对于每个帖子,您只能有一个*\'1\\u rep\'*键,我建议保持函数不变,只需获取保存在
"_who_save_{$key}"
领域
注意:在上面的代码中,我使函数只在“added\\u post\\u meta”上运行,因此它在保存meta时运行,而不是在更新meta时运行。。。如果你想让它也在更新时运行,只需添加
add_action( \'updated_post_meta\', \'who_save_what\', 20, 4 );