当用户更改用户角色时编辑后置内容?

时间:2018-04-16 作者:jockebq

我正在尝试更新数据库中名为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”时启动此功能。

1 个回复
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 );

结束