我正在尝试更新数据库中名为background video的Posteta字段。当用户将角色更改为名为basic的用户角色时,我想清除此值。
我发现了这段代码,据我所知,当用户将角色更改为用户角色“basic”时,会运行这段代码。
add_action( \'basic\', function( $user_id, $role, $old_roles )
{
// Your code ...
}, 10, 3 );
问题是,我不知道如何定位所有称为背景视频的Posteta字段,并清除其中的元值。
编辑:我尝试了这个,但不起作用:
add_action( \'set_user_role\', function( $user_id, $role, $old_roles )
{
if ( \'basic\' == $role ) {
$args = array( \'fields\' => \'ids\',
\'posts_per_page\' => -1,
\'post_type\' => \'attachment\',
\'meta_key\' => \'background-video\'
);
$all_ids = new WP_Query( $args );
foreach( $all_ids as $ai ) {
update_post_meta( $ai->post->ID, \'background-video\', \'\' );
}
wp_reset_postdata();
}
}, 10, 3 );
在此处找到函数
How can update custom meta for all posts另一件事是,我在WP Multisite上使用此功能,我允许用户从几个不同的角色中进行选择,但我希望在用户选择“basic”时启动此功能。
SO网友:Krzysiek Dróżdż
嗯,你不完全正确。调用操作时,将运行此代码basic
将使用调用do_action(\'basic\', ...)
. 但是WP core中没有这样的操作,所以您的代码恐怕根本无法运行。
有一个钩子可能对你的情况有帮助。它叫set_user_role
它有3个参数($user_id
, $role
, $old_roles
).
因此,您的代码应该更像这样:
add_action( \'set_user_role\', function( $user_id, $role, $old_roles )
{
if ( \'basic\' == $role ) {
// Your code ...
}
}, 10, 3 );