我又带着一个奇怪的问题来到这里。
首先,我使用ACF插件添加cistom字段。我的代码看起来像这样:
global $testMe;
$testMe = 0;
function my_acf_update_value( $value, $post_id, $field ) {
global $testMe;
$testMe = $value;
return $value;
}
add_filter(\'acf/update_value/key=field_5308e5e79784b\', \'my_acf_update_value\', 10, 3);
echo $testMe; // -> print 0, not the $value!?
问题是,我希望在应用过滤器后,$testMe包含$value的值。
知道我哪里错了吗?
SO网友:s_ha_dum
我进行了一次测试,并完成了以下工作:
global $testMe;
$testMe = 0;
function my_acf_update_value( $value, $post_id, $field ) {
global $testMe;
$testMe = $value;
return $value;
}
add_filter(\'acf/update_value/key=field_5308e5e79784b\', \'my_acf_update_value\', 10, 3);
// Test: Apply the filter
apply_filters(\'acf/update_value/key=field_5308e5e79784b\',\'a\',\'b\',\'c\');
// end Test
echo $testMe; // prints \'a\'
因此,原则上,您的代码是功能性的。我认为有几件事可能会出错。
- 钩子运行后,您正在添加过滤器。进行该测试
apply_filters
在剩下的代码之前,它不会工作你把钩子的名字弄错了除此之外,它应该可以工作。然而global
变量技术有点混乱。我可以提出这样的建议吗:function my_acf_grab_value($value,$echo = false) {
static $var = 0;
if (false === $echo) {
$var = $value;
} else {
return $var;
}
}
function my_acf_update_value( $value, $post_id, $field ) {
my_acf_grab_value($value);
return $value;
}
add_filter(\'acf/update_value/key=field_5308e5e79784b\', \'my_acf_update_value\', 10, 3);
// Test: Apply the filter
apply_filters(\'acf/update_value/key=field_5308e5e79784b\',\'Yay\',\'b\',\'c\');
// end test
echo my_acf_grab_value(\'\',true);
或者这个:function my_acf_update_value( $value = \'\', $post_id = 0, $field = \'\' ) {
static $var = 0;
if (!empty($value)) {
$var = $value;
} else {
return $var;
}
return $value;
}
add_filter(\'acf/update_value/key=field_5308e5e79784b\', \'my_acf_update_value\', 10, 3);
// Test: Apply the filter
apply_filters(\'acf/update_value/key=field_5308e5e79784b\',\'Yay\',\'b\',\'c\');
// end test
echo my_acf_update_value();