编辑用户配置文件的管理员审批

时间:2014-10-23 作者:twenty

我正在寻找一个插件,但没有用。无论如何,我正在使用ACF Pro构建一个自定义Wordpress主题(它工作得很好),并为每个用户添加了许多不同的自定义字段(如价格、位置、技能等)

我想做的是控制价格,或者至少在用户更改某个ACF字段(如价格或位置)时收到一封电子邮件,以便我可以比较原始值和新值。假设用户的价格为20欧元/小时-如果他将该值更改为30欧元,我希望收到电子邮件或能够批准这些更改。但在此期间不应停用用户配置文件,我只想在这些更改生效之前批准它们。

我真的很感激任何帮助!

1 个回复
最合适的回答,由SO网友:kaiser 整理而成

这个update_option() 函数有一个过滤器:

$value = apply_filters( "pre_update_option_{$option}", $new_value, $old_value );
在这个过滤器之后,还有一个过滤器not 想要使用。

$value = apply_filters( \'pre_update_option\', $value, $option, $old_value );
(如果要使用该选项,则必须在回调中检查选项名称,这会增加不必要的开销。

然后,您需要做什么,通过以下方式对特定选项做出反应更改内容sending a mail via wp_mail(), 是将回调附加到该筛选器。阅读@TODO 并填写缺失的位:

<?php
/** Plugin Name: (#16621) Send mail after Option Value changed */

add_action( \'plugins_loaded\', \'166221reactMail\' );
function 166221reactMail()
{
    // @TODO Add you option names (valid triggers) here:
    $valid = [
        \'your\',
        \'option\',
        \'names\',
        \'here\',
    ];

    // Attach each filter: Precise targetting option names
    foreach ( $valid as $name )
    {
        add_filter( "pre_update_option_{$name}", function( $new, $old )
        {
            # @TODO Adjust check/validity of mail trigger here
            if ( $new !== $old )
            {
                # @TODO uncomment the following line - see note below
                // add_filter( \'wp_mail_from\', \'166221reactMailFrom\' );

                # @TODO Adjust values for wp_mail()
                wp_mail(
                    \'[email protected]\',
                    sprintf( \'Change notification from %s\', get_option( \'blogname\' ) ),
                    sprintf( \'Value changed from %s to %s\', $old, $new )
                );
            }

            return $new;
        }
    }
}
为了更轻松地添加创建高度特定的邮件收件箱规则,您可能还需要添加以下内容:

// @TODO Change "from" Name to make creating inbox rules easier
function 166221reactMailFrom( $from )
{
    remove_filter( current_filter(), __FUNCTION__ );
    return "[email protected]";
}
编辑刚刚意识到我在过滤器选项上写了一个答案,这在后元过滤器上没有任何意义。您必须将过滤器名称与来自update_metadata(), 由以下操作触发update_post_meta() 其中$meta_typepost. 有两种筛选器或操作可供使用:

do_action( "update_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value );
或者,如果您知道您使用post posttype:

do_action( \'update_postmeta\', $meta_id, $object_id, $meta_key, $meta_value );
如果要在值更新后触发:

do_action( "updated_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value );
特别是针对post 岗位类型:

do_action( \'updated_postmeta\', $meta_id, $object_id, $meta_key, $meta_value );

结束

相关推荐

从GET_USERS()或GET_USERDATA()函数获取作者页面插件

wp_list_authors() 提供永久链接的作者页面列表(site.com/author/john、site.com/author/jenny等)。我想使用相同的链接get_users() 或get_userdata() 而不是函数。我需要这些函数,因为我以一种非常定制的方式显示作者。然而,我不知道如何用这些函数获得适当的作者页面。(例如,一位作者的用户名是电子邮件地址wp_list_authors()-为她的作者页生成的链接用破折号代替了“@”和“.”。这意味着作者页面slug不一定与用户名相同)

编辑用户配置文件的管理员审批 - 小码农CODE - 行之有效找到问题解决它

编辑用户配置文件的管理员审批

时间:2014-10-23 作者:twenty

我正在寻找一个插件,但没有用。无论如何,我正在使用ACF Pro构建一个自定义Wordpress主题(它工作得很好),并为每个用户添加了许多不同的自定义字段(如价格、位置、技能等)

我想做的是控制价格,或者至少在用户更改某个ACF字段(如价格或位置)时收到一封电子邮件,以便我可以比较原始值和新值。假设用户的价格为20欧元/小时-如果他将该值更改为30欧元,我希望收到电子邮件或能够批准这些更改。但在此期间不应停用用户配置文件,我只想在这些更改生效之前批准它们。

我真的很感激任何帮助!

1 个回复
最合适的回答,由SO网友:kaiser 整理而成

这个update_option() 函数有一个过滤器:

$value = apply_filters( "pre_update_option_{$option}", $new_value, $old_value );
在这个过滤器之后,还有一个过滤器not 想要使用。

$value = apply_filters( \'pre_update_option\', $value, $option, $old_value );
(如果要使用该选项,则必须在回调中检查选项名称,这会增加不必要的开销。

然后,您需要做什么,通过以下方式对特定选项做出反应更改内容sending a mail via wp_mail(), 是将回调附加到该筛选器。阅读@TODO 并填写缺失的位:

<?php
/** Plugin Name: (#16621) Send mail after Option Value changed */

add_action( \'plugins_loaded\', \'166221reactMail\' );
function 166221reactMail()
{
    // @TODO Add you option names (valid triggers) here:
    $valid = [
        \'your\',
        \'option\',
        \'names\',
        \'here\',
    ];

    // Attach each filter: Precise targetting option names
    foreach ( $valid as $name )
    {
        add_filter( "pre_update_option_{$name}", function( $new, $old )
        {
            # @TODO Adjust check/validity of mail trigger here
            if ( $new !== $old )
            {
                # @TODO uncomment the following line - see note below
                // add_filter( \'wp_mail_from\', \'166221reactMailFrom\' );

                # @TODO Adjust values for wp_mail()
                wp_mail(
                    \'[email protected]\',
                    sprintf( \'Change notification from %s\', get_option( \'blogname\' ) ),
                    sprintf( \'Value changed from %s to %s\', $old, $new )
                );
            }

            return $new;
        }
    }
}
为了更轻松地添加创建高度特定的邮件收件箱规则,您可能还需要添加以下内容:

// @TODO Change "from" Name to make creating inbox rules easier
function 166221reactMailFrom( $from )
{
    remove_filter( current_filter(), __FUNCTION__ );
    return "[email protected]";
}
编辑刚刚意识到我在过滤器选项上写了一个答案,这在后元过滤器上没有任何意义。您必须将过滤器名称与来自update_metadata(), 由以下操作触发update_post_meta() 其中$meta_typepost. 有两种筛选器或操作可供使用:

do_action( "update_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value );
或者,如果您知道您使用post posttype:

do_action( \'update_postmeta\', $meta_id, $object_id, $meta_key, $meta_value );
如果要在值更新后触发:

do_action( "updated_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value );
特别是针对post 岗位类型:

do_action( \'updated_postmeta\', $meta_id, $object_id, $meta_key, $meta_value );