我正在试图更新数据库中的一个后置元字段,名为背景视频。当用户将角色更改为一个名为basic的用户角色时,我想清除这个值。
我找到了这段代码,据我所理解,当用户将角色更改为"basic“时,代码就会运行。
add_action( 'basic', function( $user_id, $role, $old_roles )
{
// Your code ...
}, 10, 3 );问题是,我不知道如何针对所有的后元字段称为背景视频,并从他们清除元值。
编辑:我试过了,但它不起作用:
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 );在这里找到函数如何更新所有帖子的自定义元数据
另一件事是,我在WP Multisite上使用这个,我让用户从几个不同的角色中选择,但是我希望这个函数在他们选择"basic“时启动。
发布于 2018-04-16 11:21:43
你说的不完全对。当名为basic的操作将使用do_action('basic', ...)调用时,此代码将运行。但是..。在WP核心中没有这样的操作,所以恐怕您的代码根本不会运行。
有些钩子可能对你的情况有帮助。它被称为set_user_role,它有3个params ($user_id,$role,$old_roles)。
因此,您的代码应该更像这样:
add_action( 'set_user_role', function( $user_id, $role, $old_roles )
{
if ( 'basic' == $role ) {
// Your code ...
}
}, 10, 3 );https://wordpress.stackexchange.com/questions/300905
复制相似问题