从插件文件添加过滤器时遇到一些困难。 过滤器应用于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 );
阵列保持不变,不会改变。
任何人都知道我做错了什么?
答案 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)
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 );
似乎未定义(你应该粘贴完整的代码,而不是小部分)。