过滤器不挂钩
Filter not hooking
我在从插件文件添加过滤器时遇到了一些困难。
过滤器应用于 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 );
数组保持不变,没有变化。
有人知道我做错了什么吗?
确保在应用过滤器标签之前添加您的过滤器。
快速调试
// 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) 在 wordpress.stackexchange.com
提出此类问题
2) 我怀疑问题出在 add_user_meta( $user_id, 'data', $user_meta );
$user_id
那里似乎没有定义(你应该粘贴完整的代码,而不是一小部分)。
我在从插件文件添加过滤器时遇到了一些困难。 过滤器应用于 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 );
数组保持不变,没有变化。
有人知道我做错了什么吗?
确保在应用过滤器标签之前添加您的过滤器。
快速调试
// 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) 在 wordpress.stackexchange.com
提出此类问题2) 我怀疑问题出在 add_user_meta( $user_id, 'data', $user_meta );
$user_id
那里似乎没有定义(你应该粘贴完整的代码,而不是一小部分)。