使用SAVE_POST更新用户后获取ACF值

时间:2018-06-11 作者:Nikko Dela Cruz

如何在用户菜单中单击更新用户后获取ACF的值。我有以下代码,但不起作用:

function get_acf_value ($post_id) {
    $v = get_field(\'field_5b1d13fce338d\', $post_id);
    echo $v;
}
add_action( \'acf/save_post\', \'get_acf_value\' );

3 个回复
SO网友:Shibi

您的代码正在工作,但不会打印到屏幕上,因为save\\u post在ajax中运行。您可以使用error_log().

wp配置中的第一个。php您需要打开调试并将其设置为登录到文件而不是显示

define(\'WP_DEBUG\', true);
define(\'WP_DEBUG_DISPLAY\', false);
define(\'WP_DEBUG_LOG\', true);
它将在名为debug的wp content文件夹中创建一个文件。日志

然后你可以使用error_log() 要进行如下调试:

function get_acf_value ($post_id) {
    $v = get_field(\'field_5b1d13fce338d\', $post_id);
    error_log($v);
    // Incase it is array you can use print_r
    error_log( print_r( $v, true ) );
}
add_action( \'acf/save_post\', \'get_acf_value\' );

SO网友:Krzysiek Dróżdż

正如Shibi已经指出的,在save_postacf/save_post 没有多大意义,因为您不会看到太多输出。但我不认为你想用这个值来回应它。我猜这只是某种调试方式?

但是,您的代码还有一个问题。它很可能会返回给定字段的上一个值。为什么?ACF文件offers some explanation.

此筛选器允许您在保存数据之前或之后挂接。需要注意的是,get\\u field()函数将在这些时间返回不同的值(以前的值/新值)。

所以,如果使用的优先级小于10,则会得到给定字段的前一个值。

function get_acf_value ($post_id) {
    $v = get_field(\'field_5b1d13fce338d\', $post_id);
    // $v contains old value of field \'field_5b1d13fce338d\'
    echo $v;
}
add_action( \'acf/save_post\', \'get_acf_value\', 1 ); // <- priority is 1
如果使用的优先级大于10,则该字段将获得新值。

function get_acf_value ($post_id) {
    $v = get_field(\'field_5b1d13fce338d\', $post_id);
    // $v contains new value of field \'field_5b1d13fce338d\'
    echo $v;
}
add_action( \'acf/save_post\', \'get_acf_value\', 20 ); // <- priority is 20
使用优先级等于10的函数有点冒险——很可能会得到旧的或新的值,这取决于什么时候分配了钩子。

SO网友:Konrad Gałęzowski

硬编码字段ID通常被认为是一个坏主意,因为只有在导出和导入字段时,它才会起作用,并且您正在将ACF的实现细节硬编码到代码中。更不易挥发的解决方案是使用字段的名称。

假设您的字段名为is_allowed_to_make_reviews. 您可以使用下面的代码在字段保存时挂钩,并对其值执行任何需要的操作。

function update_is_allowed_to_make_reviews($user_id)
{
    if (is_admin() === false) { // if you want it to work only in wp_admin
        return;
    }

    if ($_POST[\'_acf_screen\'] !== \'user\') { // to not fire it on other screens
        return;
    }

    $value = get_field(\'is_allowed_to_make_reviews\', $user_id);

    echo $value;
}

add_action(\'acf/save_post\', \'update_is_allowed_to_make_reviews\', 100);

结束

相关推荐

使用SAVE_POST更新用户后获取ACF值 - 小码农CODE - 行之有效找到问题解决它

使用SAVE_POST更新用户后获取ACF值

时间:2018-06-11 作者:Nikko Dela Cruz

如何在用户菜单中单击更新用户后获取ACF的值。我有以下代码,但不起作用:

function get_acf_value ($post_id) {
    $v = get_field(\'field_5b1d13fce338d\', $post_id);
    echo $v;
}
add_action( \'acf/save_post\', \'get_acf_value\' );

3 个回复
SO网友:Shibi

您的代码正在工作,但不会打印到屏幕上,因为save\\u post在ajax中运行。您可以使用error_log().

wp配置中的第一个。php您需要打开调试并将其设置为登录到文件而不是显示

define(\'WP_DEBUG\', true);
define(\'WP_DEBUG_DISPLAY\', false);
define(\'WP_DEBUG_LOG\', true);
它将在名为debug的wp content文件夹中创建一个文件。日志

然后你可以使用error_log() 要进行如下调试:

function get_acf_value ($post_id) {
    $v = get_field(\'field_5b1d13fce338d\', $post_id);
    error_log($v);
    // Incase it is array you can use print_r
    error_log( print_r( $v, true ) );
}
add_action( \'acf/save_post\', \'get_acf_value\' );

SO网友:Krzysiek Dróżdż

正如Shibi已经指出的,在save_postacf/save_post 没有多大意义,因为您不会看到太多输出。但我不认为你想用这个值来回应它。我猜这只是某种调试方式?

但是,您的代码还有一个问题。它很可能会返回给定字段的上一个值。为什么?ACF文件offers some explanation.

此筛选器允许您在保存数据之前或之后挂接。需要注意的是,get\\u field()函数将在这些时间返回不同的值(以前的值/新值)。

所以,如果使用的优先级小于10,则会得到给定字段的前一个值。

function get_acf_value ($post_id) {
    $v = get_field(\'field_5b1d13fce338d\', $post_id);
    // $v contains old value of field \'field_5b1d13fce338d\'
    echo $v;
}
add_action( \'acf/save_post\', \'get_acf_value\', 1 ); // <- priority is 1
如果使用的优先级大于10,则该字段将获得新值。

function get_acf_value ($post_id) {
    $v = get_field(\'field_5b1d13fce338d\', $post_id);
    // $v contains new value of field \'field_5b1d13fce338d\'
    echo $v;
}
add_action( \'acf/save_post\', \'get_acf_value\', 20 ); // <- priority is 20
使用优先级等于10的函数有点冒险——很可能会得到旧的或新的值,这取决于什么时候分配了钩子。

SO网友:Konrad Gałęzowski

硬编码字段ID通常被认为是一个坏主意,因为只有在导出和导入字段时,它才会起作用,并且您正在将ACF的实现细节硬编码到代码中。更不易挥发的解决方案是使用字段的名称。

假设您的字段名为is_allowed_to_make_reviews. 您可以使用下面的代码在字段保存时挂钩,并对其值执行任何需要的操作。

function update_is_allowed_to_make_reviews($user_id)
{
    if (is_admin() === false) { // if you want it to work only in wp_admin
        return;
    }

    if ($_POST[\'_acf_screen\'] !== \'user\') { // to not fire it on other screens
        return;
    }

    $value = get_field(\'is_allowed_to_make_reviews\', $user_id);

    echo $value;
}

add_action(\'acf/save_post\', \'update_is_allowed_to_make_reviews\', 100);

相关推荐