过滤不挂钩

时间:2016-11-15 22:00:58

标签: php ajax wordpress filter hook

从插件文件添加过滤器时遇到一些困难。 过滤器应用于AJAX函数。 正确包含插件文件,因为所有其他代码都运行正常。 ajax.php文件中的其他代码完美无缺。

ajax.php

$user_meta = array(
    'lang'      =>  substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2),
    'actkey'    =>  $actkey,
);
$user_meta = apply_filters( 'add_more_meta', $user_meta, $_POST );
add_user_meta( $user_id, 'data', $user_meta );

插件-file.php

function add_more_meta ( $user_meta, $var ) {
    //NOT HOOKING
    $user_meta['major'] = 'major';
    return $user_meta;
}
add_filter( 'add_more_meta', 'add_more_meta', 10, 2 );

阵列保持不变,不会改变。

任何人都知道我做错了什么?

2 个答案:

答案 0 :(得分:0)

确保在应用过滤器标记之前添加过滤器。

快速调试

// Print all filters before `add_more_meta` filter tag applied.
global $wp_filters;
var_dump($wp_filters);

// or check it by has_filter($tag, $function_to_check = false) function.

if(has_filter('add_more_meta', 'add_more_meta') {
var_dump('Yes, filtered');
} else {
var_dump('No, not filtered');
}

$user_meta = apply_filters( 'add_more_meta', $user_meta, $_POST );

可能的修复

add_action('init', 'add_my_custom_filters', 10);

function add_my_custom_filters() {
add_filter( 'add_more_meta', 'add_more_meta', 10, 2 );
}

打包自定义过滤器并将其挂钩到init操作通常会确保过滤器在包含ajax的所有位置正常工作。

答案 1 :(得分:0)

1)在wordpress.stackexchange.com

询问此类问题

2)我怀疑问题是 HttpClient http = new HttpClient(); http.DefaultRequestHeaders.Add("Authorization", "Bearer " + AuthHeader); http.DefaultRequestHeaders.Add("User-Agent","myuser@me.com"); var response = await http.GetAsync(completeUrl); string jsonstring = await response.Content.ReadAsStringAsync(); add_user_meta( $user_id, 'data', $user_meta );似乎未定义(你应该粘贴完整的代码,而不是小部分)。