我在我的主题中使用了ACF(高级自定义字段)插件。这个插件提供了一个更简单的方法get_field()
我们可以用它代替WordPress nativeget_post_meta()
方法现在,问题是get_field()
如果ACF插件处于活动状态,则方法可以正常工作,但当插件处于非活动状态时,主题前端会出现以下错误:
Fatal error: Call to undefined function get_field()
现在,我尝试提供一个回退功能,该功能应该在插件未激活时使用,我的回退功能如下:
if ( !function_exists(\'get_field\') ) {
function get_field($key) {
return get_post_meta(get_the_ID(), $key, true);
}
}
add_action( \'after_setup_theme\', \'get_field\' );
现在,当ACF插件处于非活动状态时,此功能确实可以工作,但一旦我尝试激活ACF插件,后端就会出现以下错误:
Fatal error: Cannot redeclare get_field()
现在,我只想在插件未激活时使用我的回退功能,并且它不应该在之后停止激活ACF插件。
解决方案是什么?
最合适的回答,由SO网友:Faisal Khurshid 整理而成
这个问题已经解决了。似乎定义了ACF插件get_field()
函数无法重写定义的主题get_field()
激活ACF插件的功能。因此,它抛出Fatal error: Cannot redeclare get_field(
) 使用以下代码时出错:
if ( !function_exists(\'get_field\') ) {
function get_field($key) {
return get_post_meta(get_the_ID(), $key, true);
}
}
现在,在激活ACF插件之前,我们只需要在主题的前端使用此自定义包装器函数,我们可以将其注册限制在前端,如下所示:
if ( !is_admin() && !function_exists(\'get_field\') ) {
function get_field($key) {
return get_post_meta(get_the_ID(), $key, true);
}
}
现在,我们的后端不知道我们的自定义
get_field()
这样在激活插件时和激活插件后,ACF插件的
get_field()
功能将按预期接管。